JavaScript中的正则表达式[^ a-z] [0-9]

时间:2018-07-19 03:41:44

标签: javascript regex

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,我认为它应该无效,但我认为它是有效的。 谁能解释我在哪里想错了。

3 个答案:

答案 0 :(得分:6)

问题是,您没有检查字符串的开头和结尾。

指定正则表达式的 开始 结束

/^[^a-z][0-9]+$/

插入号^和美元$字符在正则表达式中具有特殊含义。它们被称为。 插入符^在文本的开头匹配,而美元$在末尾匹配。

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);

更多Start of String and End of String Anchors in Regular Expression

答案 1 :(得分:1)

尝试/^[0-9]+$/g.test(str)

> var s = '122a'
undefined
>
> /^[0-9]+$/g.test(s)
false
>
> var s = '122'
undefined
>
> /^[0-9]+$/g.test(s)
true
>

答案 2 :(得分:0)

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

中的122a相匹配

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

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

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

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