正则表达式验证字符串必须同时包含字母、数字、_

验证字符串必须包含字母、数字、_

/^(?=.*\d+)(?=.*_+)(?=.*[A-Za-z]+)[\w]{6,16}$/
表示长度为6-16位同时包含:数字、字母 、 _

.    表示匹配除"\n"(换行符)和"\r"(回车符)之外的任何单个字符。
*   表示匹配前面的子表达式任意次。
()   表示将()的表达式定义为“组” ,并且将匹配这个表达式的字符保存到一个临时区域(一个正在表达式中最多可以保存9个),它们可以用 \1 至 \9 的符号来引用。

另外这里主要用到了js正则表式中的正向前瞻 (?=),举个栗子

/\d.exec(‘abc2abc’)/ 匹配结果为2,解释:匹配一个数字
/\d(?=a)/.exec(‘abc2abc’)/ 匹配结果为2,解释:匹配一个数字,但是这个数字后面必须跟着字母a

由此可以看出,(?=) 匹配结果中不包含它所匹配的字符,但是待匹配字符串必须符合它所对应的规则
当有多个前瞻规则时它们是并列的,不是串行的,比如

/\d(?=a)(?=b)/.exec(“abc2bc”) 匹配结果为null,解释:匹配一个数字,这个数字后面必须跟着字母a和字母b,这肯定是不能够成立的。

/\d(?=a)(?=.b)/.exec(“abc2abc”) 匹配结果为2,解释:匹配一个数字,满足条件
①数字后面必须跟着数字a
②数字后面必须是包含一个任意字符后跟着b (.b)

所以**/^(?=.*\d+)(?=.*_+)(?=.*[A-Za-z]+)\w{6,16}$/**正则表达式就可以拆分成

/^(?=.*\d+)[\w]{6,16}$/ 解释:匹配属于\w并且任意字符过后必须跟着数字
/^(?=.*_+)[\w]{6,16}$/ 解释:匹配属于\w并且任意字符过后必须跟着_
/^(?=.*[A-Za-z]+)[\w]{6,16}$/ 解释:匹配属于\w并且任意字符过后必须跟着字母

验证字符串必须包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符

/^(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*?]).{6,16}$/

与上面的分析相同

你可能感兴趣的:(正则表达式)