function checkEmail(str){
    var emailCheck = /[^a-z][0-9]/;
    if(emailCheck.test(str)){
      console.log("**Its Valid Mail");
    }
    else{
      console.log("Its not Valid");
    }
}
var x = '122a';
checkEmail(x);



我一直在学习正则表达式。
根据我所理解的上述代码,x不应包含小a-z,而必须包含数字,因为您可以看到122a包含数字以及小写字母a,我认为它应该无效,但我认为它是有效的。
谁能解释我在哪里想错了。

最佳答案

您正则表达式[^a-z][0-9]匹配2个字符。第一个将使用否定的character class匹配不与a-z匹配,第二个将匹配一个数字。这将与12中的122a匹配

方法test在字符串中搜索匹配项,找到匹配的12并将返回true

您可以使用 anchor 来声明字符串的开始^和结束$以匹配2个字符。在这种情况下,122a将不匹配,因为这是4个字符。

如果要检查字符串是否不包含小写字符且包含数字,则可以使用lookahead断言其后面不是[a-z],而后面是数字[0-9]

^(?!.*[a-z])(?=.*[0-9]).*$

10-04 16:33