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