您的正则表达式非常多余,您正在做很多不必要的转义。您可以使用较短的版本:
/^([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-.'&] 任何字符: ato z, Ato Z, 0to 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