正则表达式必须包含数字和字母两种组合

作者 LoaingMore 日期 2017-02-21
正则表达式必须包含数字和字母两种组合

做表单验证经常做判断密码的组合,强度之类的校验,最近仔细研究了下正则,体会到了正则的强大,所以用几种方法来实现这一需求

分析

正则表达式中必须包含字母数字(不能纯数字或纯字母),那么就必须要判断该字符串中:

  • 必须包含数字
  • 必须包含字母

实现

这里会用到正则的环视(零宽断言):(?=exp)和(?!exp),所以我们的正则可以写为:
第一种实现用(?=exp):

//(?=exp) 必须包含?=exp 后面的字符(意味着必须有至少一个字母,一个数字)
/^(?=.*?[0-9])(?=.*?[a-z])[0-9a-z]+$/

第二种实现用(?!exp):

//(?!exp)不包含?!exp后面的字符(意味着不能是纯数字 纯字母)
/(?!^[0-9]+$)(?!^[a-z]+$)^[0-9a-z]+$/

当然,如果需要限定字符串长度,我们后面的[a-z0-9]+可以改为一个长度范围,+改为如{5,16};

改需求 必须包含字母数字特殊字符

其实就是在上面的正则中加入特殊字符即可 这里只输入[email protected]&=几个字符,根据需要可自行扩充
第一种实现用(?=exp):

//(?=exp) 必须包含?=exp 后面的字符(意味着必须有至少一个字母,一个数字,一个特殊字符)
/^(?=.*?[0-9])(?=.*?[a-z])(?=.*?[_\[email protected]&=])[0-9a-z_\[email protected]&=]+$/

第二种实现用混合

//(?=exp)
//必须包含?=exp 后面的字符(意味着必须有至有字母,数字,不全是字母数字
//(意味着有特殊字符))
/^(?=.*?\d)(?=.*?[a-z])(?!^[a-z\d]+$).+$/;

改需求 必须包含字母数字特殊字符中任意两种组合

其实就是在上面的正则中加入特殊字符即可 这里只输入[email protected]&=几个字符,根据需要可自行扩充
实现用(?!exp):

//(?!exp)不包含?!exp后面的字符(意味着不能是纯数字 纯字母 纯特殊字符)
/(?!^[0-9]+$)(?!^[a-z]+$)(?!^[_\[email protected]&=]]+$)^[0-9a-z_\[email protected]&=]+$/

###解读正则

正则以^开始,限定匹配字符串是从开始位置进行匹配,(?=.?[a-z])是肯定型顺序环视,限定当前位置的后面,能匹配.?[a-z],也就是,能够匹配到一个字母,同理,(?=.?[0-9])表示限定当前位置的后面,能匹配一个数字,(?=.?[[email protected]&=])表示限定当前位置的后面,能匹配一个特殊字符,而[a-z0-9[email protected]&=]+就是前面那些环视限定的位置,即表示[[email protected]&=]+中,至少匹配一个字母、一个数字、一个特殊字符,最终匹配到达字符串结束位置$。

参考

30分钟入门正则表达式