正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。
什么是正则表达式?
正则表达式是由一个字符序列形成的搜索模式。
当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。
正则表达式可以是一个简单的字符,或一个更复杂的模式。
正则表达式可用于所有文本搜索和文本替换的操作。
语法
/正则表达式主体/修饰符(可选)
正则表达式修饰符
修饰符 可以在全局搜索中不区分大小写:
修饰符 | 描述 |
---|---|
i | 执行对大小写不敏感的匹配。 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
m | 执行多行匹配。 |
正则表达式模式
方括号用于查找某个范围内的字符:
表达式 | 描述 |
---|---|
[abc] | 查找方括号之间的任何字符。 |
[0-9] | 查找任何从 0 至 9 的数字。 |
(x|y) | 查找任何以 | 分隔的选项。 |
元字符是拥有特殊含义的字符:
元字符 | 描述 |
---|---|
\d | 查找数字。 |
\s | 查找空白字符。 |
\b | 匹配单词边界。 |
\uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。 |
量词:
量词 | 描述 |
---|---|
n+ | 匹配任何包含至少一个 n 的字符串。 |
n* | 匹配任何包含零个或多个 n 的字符串。 |
n? | 匹配任何包含零个或一个 n 的字符串。 |
基本表单正则校验规则文件
export const regex = {
phone: /^1[3456789]\d{9}$/, // 手机号
telephone: /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/, // 固话
idcard:
/^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|30|31)|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}([0-9]|x|X)$/, // 身份证
positiveInteger: /^[0-9]{1,6}$/, // 正整数
decimal: /^([1-9]\d{1,10}|\d)(.\d{1,2})?$/, // 整数或小数(保留两位小数)
decimalFour: /^([1-9]\d{1,10}|\d)(.\d{1,4})?$/, // 整数或小数(保留四位小数)
email: /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/, // 邮箱
creditCode: /^([0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}|[1-9]\d{14})$/, // 统一社会信用代码
infoNo: /^[A-Za-z0-9]{1,20}$/, // 编号 大小写字母或数字组合
carNumber:
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/,
url: /^(https?):\/\/([\w-]+(\.[\w-]+)*\/?)+(\?([\w\-\.,@?^=%&:\/~\+#]*)+)?$/,
ruleName: /^[\u4e00-\u9fa5A-Za-z0-9\-\_]*$/, // 人像布控规则名,中文、英文、数字、-、_
longitude:
/^[\-\+]?(0(\.\d{1,10})?|([1-9](\d)?)(\.\d{1,10})?|1[0-7]\d{1}(\.\d{1,10})?|180\.0{1,10})$/, // 经度
latitude: /^[\-\+]?((0|([1-8]\d?))(\.\d{1,10})?|90(\.0{1,10})?)$/, // 纬度
};
const REQUIRED = {
required: true,
message: '该项不能为空',
};
/** 表单长度等校验规则**/
const INPUTMAXLENGTH = { max: 50, message: '最多输入50个字' };
const TEXTAREAMAX = { max: 255, message: '最多输入255个字' };
// 正整数
const POSITIVEINT = {
pattern: regex.positiveInteger,
message: '请填写正整数,最大值为999999',
};
const DECIMAL = {
pattern: regex.decimal,
message: '请输入正确格式的数字,如是小数保留两位',
};
const DECIMALFOUR = {
pattern: regex.decimalFour,
message: '请输入正确格式的数字,如是小数保留四位',
};
// 手机格式
const PHONE = { pattern: regex.phone, message: '请填写正确格式的手机号码' };
const TELEPHONE = {
pattern: regex.telephone,
message: '请填写正确格式的固定电话',
};
// 身份证
const IDCARD = { pattern: regex.idcard, message: '请填写正确格式的身份证号码' };
// 统一社会信用代码
const CREDITCODE = {
pattern: regex.creditCode,
message: '请填写正确格式的统一社会信用代码',
};
// 数字和字母组合,适用于编号
const INFONO = {
pattern: regex.infoNo,
message: '请填写正确格式的编号:由大小写字母和数字组合,最大长度20位',
};
// 车牌
const CAR_NUMBER = {
pattern: regex.carNumber,
message: '请填写正确格式的车牌号码',
};
//坐标
const LONGITUDE = {
pattern: regex.longitude,
message: '请填写正确格式的经度',
};
const LATITUDE = {
pattern: regex.latitude,
message: '请填写正确格式的纬度',
};
export default {
REQUIRED,
INPUTMAXLENGTH,
TEXTAREAMAX,
POSITIVEINT,
DECIMAL,
DECIMALFOUR,
PHONE,
TELEPHONE,
IDCARD,
CREDITCODE,
INFONO,
CAR_NUMBER,
LONGITUDE,
LATITUDE,
};
导入import verRules from '@/utils/verRules';
<Form.Item rules={[verRules.REQUIRED, verRules.POSITIVEINT]}>
<Input allowClear />
</Form.Item>
正则:必填, 正整数