以下是我的代码:
function isValid(passCode){
var myRegExp=/[^a-z\d]/i;
return !(myRegExp.test(passCode));
}
if (isValid(prompt("Enter passcode:",""))){
alert("Access granted");
}else{
alert("Denied");
}
根据我的理解,如果我将abc
作为参数传递给isValid()
函数,myRegExp.test
应该返回true
,因此{{1}应该返回isValid()
(因为使用了false
运算符)。
但该函数返回!
。为什么呢?
这是JSFiddle:https://jsfiddle.net/k7d4va5k/#&togetherjs=GCP5bmgPP4
答案 0 :(得分:1)
使用"字符类",也称为"字符集",您可以告诉正则表达式引擎只匹配多个字符中的一个。只需将要匹配的字符放在方括号中即可。
/[a-z\d]/
此waill匹配字母和数字
在左方括号之后键入插入符号(^
)会否定字符类。结果是字符类匹配任何不在字符类中的字符。因此
/[^a-z\d]/.test('abc') will be false
/^[a-z\d]/.test('abc') will be true
因为在后一种情况下,插入符号表示一行的开头,这意味着如果在字符类之外使用插入符号,则它表示行的开头而不是否定字符类。