您的正则表达式非常多余,您正在做很多不必要的转义。您可以使用较短的版本:
/^([a-zA-Z0-9-.'&])*$/
请注意,我添加了一些锚点,它们对于RegExp.test()
;
var myObj = { mask : /^([a-zA-Z0-9-.'&])*$/ }
function check(myObj , value){
return myObj.mask.test(value);
}
console.log(check(myObj, "abc1-.'&")); //true
console.log(check(myObj, "&#$%")); //false
console.log(check(myObj, "abc#")); //false
解释/^([a-zA-Z0-9-.'&])*$/
^
字符串的开头
(
分组并捕获开始组 1
[a-zA-Z0-9-.'&]
任何字符: a
to z
, A
to Z
, 0
to 9
, -
, .
, '
or&
)
第1组结束
*
第 1 组零次或多次
$
字符串的结尾
它比原来的更简单,因为[a-z]|[A-Z]
它与[a-zA-Z]
. 此外,在字符类内部(即介于[
and之间]
),您不必转义.
,'
或&
.
如果你不能改变表达
在这种情况下,我们可以创建一个新RegExp
对象,调整作为参数传递的对象。
var myObj = { mask : /([a-z]|[A-Z]|[0-9]|-|\.|\'|[&])/ }
function check(myObj , value){
return new RegExp('^'+myObj.mask.source+'*$').test(value);
}
console.log(check(myObj, "abc1-.'&")); // true
console.log(check(myObj, "&#$%")); // false
console.log(check(myObj, "abc#")); // false