常用的正则验证,包含中国手机号,邮箱,银行卡号,身份证,网址等

12,293 阅读3分钟

一、创建正则表达式

1、方式1

正则表达式字面量被包围在一对斜杠中
let re1 = /ABC\-001/;

2、方式2

通过new RegExp('正则表达式')创建一个RegExp对象
const re2 = new RegExp('ABC\\-001');
console.log(re1) // /ABC\-001/

二、正则表达式标识

g 全局的 (匹配多次)
i 大小写不敏感(忽略字符大小写)
m 多行(^和$能匹配行结束符)

三、正则表达式字符

\d 等同于[0-9],匹配一个数字
\w 等同于[0-9A-Z_a-z]可以匹配一个字母或数字

. 可以匹配任意字符
* 表示任意个字符(包括0个)
+ 表示至少一个字符
? 表示0个或1个字符
{n} 表示n个字符 如:\d{3}表示匹配3个数字,例如'010'
{n,m} 表示n-m个字符


^表示行的开头,^\d表示必须以数字开头
$表示行的结束,\d$表示必须以数字结束。

\反斜杠 用来转义特殊字符 

实例解析

const my_regexp =/\d{3}\s+\d{3,8}/
从左到右解读:
1.\d{3}表示匹配3个数字,例如'010'2.\s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格,例如匹配' ''\t\t'等;
3.\d{3,8}表示3-8个数字,例如'1234567'。

[]表示范围
[0-9a-zA-Z\_] 可以匹配一个数字、字母或者下划线;

[0-9a-zA-Z\_]+ 可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100''0_Z''js2015'等等;

[a-zA-Z\_\$][0-9a-zA-Z\_\$]* 可以匹配由字母或下划线、$开头,后接任意个由一个数字、字母或者下划线、$组成的字符串,也就是JavaScript允许的变量名;

[a-zA-Z\_\$][0-9a-zA-Z\_\$]{0, 19} 更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。

四、实例方法

1、test() 方法用于测试给定的字符串是否符合条件 (不要对这个方法使用g标识)
var re = /^\d{3}\-\d{3,8}$/;
re.test('010-12345'); // true
re.test('010-1234x'); // false
re.test('010 12345'); // false
2、exec() 方法在匹配成功后,会返回一个Array,第一个元素是正则表达式匹配到的整个字符串,后面的字符串表示匹配成功的子串, 匹配失败时返回null。
提取字符串很有用
var re = /^(\d{3})-(\d{3,8})$/;
re.exec('010-12345'); // ['010-12345', '010', '12345']
re.exec('010 12345'); // null

常用正则手册

1、中国手机号
1、中国手机号(严谨), 根据工信部2019年最新公布的手机号段
/^((\+|00)86)?1((3[\d])|(4[5,6,7,9])|(5[0-3,5-9])|(6[5-7])|(7[0-8])|(8[\d])|(9[1,8,9]))\d{8}$/

2、中国手机号(宽松), 只要是13,14,15,16,17,18,19开头即可
/^((\+|00)86)?1[3-9]\d{9}$/

3、中国手机号(最宽松), 只要是1开头即可, 如果你的手机号是用来接收短信, 优先建议选择这一条
/^((\+|00)86)?1\d{10}$/
2、国内座机电话,如: 0341-86091234
/\d{3}-\d{8}|\d{4}-\d{7}/
3、邮箱地址
/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
4、银行卡号
/^([1-9]{1})(\d{15}|\d{18})$/
5、身份证号
1、一代身份证号(15位数字)
/^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$/

2、二代身份证号(18位数字),最后一位是校验位,可能为数字或字符X
/^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$/

3、身份证号, 支持1/2代(15位/18位数字)
/(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/
6、护照(包含香港、澳门)
/(^[EeKkGgDdSsPpHh]\d{8}$)|(^(([Ee][a-fA-F])|([DdSsPp][Ee])|([Kk][Jj])|([Mm][Aa])|(1[45]))\d{7}$)/
7、网址
/^((https?|ftp):\/\/)?([\da-z.-]+)\.([a-z.]{2,6})(\/\w\.-]*)*\/?/
8、是否QQ号格式正确
/^[1-9][0-9]{4,10}$/
9、中文姓名
/^([\u4e00-\u9fa5·]{2,16})$/
10、英文姓名
/(^[a-zA-Z]{1}[a-zA-Z\s]{0,20}[a-zA-Z]{1}$)/
11、是否由数字和字母组成
/^[A-Za-z0-9]+$/
12、纯英文字母
/^[a-zA-Z]+$/

纯小写英文字母组成
/^[a-z]+$/

纯大写英文字母
/^[A-Z]+$/
13、纯中文/汉字
/^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])+$/
14、纯数字
/^\d{1,}$/
15、中国邮政编码
/^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/
16、只包含中文和数字
/^((?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])|(\d))+$/
17、不能包含字母
/^[^A-Za-z]*$/
18、16进制颜色
/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/
17、密码验证
强:最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
/^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/

中:字母+数字,字母+特殊字符,数字+特殊字符
/^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)[a-zA-Z\d!@#$%^&*]+$/

弱:纯数字,纯字母,纯特殊字符
/^(?:\d+|[a-zA-Z]+|[!@#$%^&*]+)$/
18、是否html标签(宽松匹配)
/<(.*)>.*<\/\1>|<(.*) \/>/
19、用户名正则,4到16位(字母,数字,下划线,减号)
/^[a-zA-Z0-9_-]{4,16}$/
20、微信号,6至20位,以字母开头,字母,数字,减号,下划线
var wxPattern = /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/;
//输出 true
console.log(wxPattern.test("RuilongMao"));
20、日期
var dP2 = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;
//输出 true
console.log(dP2.test("2017-02-11"));
//输出 false
console.log(dP2.test("2017-15-11"));
21、用户名
//用户名正则,4到16位(字母,数字,下划线,减号)
var uPattern = /^[a-zA-Z0-9_-]{4,16}$/;
//输出 true
console.log(uPattern.test("iFat3"));

实战

let phoneNumber = $('[name=phone]').val();
if (!phoneNumber) {
    alert("手机号不能为空!");
    return false;
}
//正则表达式
var phoneReg = /(1[3-9]\d{9}$)/;
if (!phoneReg.test(phoneNumber)) {
    alert("请输入正确格式的手机号码!");
    return false;
}
将中文提取出来
let textArr = text.match(/[\u4e00-\u9fa5]/g)
输入框只能输入中文英文和空格
const reg = /^[a-zA-Z\u4e00-\u9fa5\s]+$/
 <Form.Item
      name="contentFirst"
      label="文本区域"
      rules={[
        { required: true },
        {
          validator: (rule, value, cbk) => {
            if (!reg.test(value)) {
              return cbk('不能输入数字和其他特殊符号')
            }
            cbk()
          },
        },
      ]}
    >
      <Input
        allowClear
        maxLength={20}
        onChange={handleContentFirst}
        style={{ width: '100%' }}
      />
    </Form.Item>