3

我必须使用在 javascript 的对象属性中设置的正则表达式,如下所示

var myObj = { mask : /([a-z]|[A-Z]|[0-9]|-|\.|\'|[&])/}

在将myObj作为参数获取的其他一些函数中,并且在该函数中,我需要测试字符串是否包含任何与正则表达式不匹配的字符。例子

function check(myObj , value){
//Want to code here to read myObj.mask and return false if value contains 
//any character not matching myObj.mask. as per above example if value contain any special character 
// like &#$% then i want to return false

}
4

2 回答 2

2

您的正则表达式非常多余,您正在做很多不必要的转义。您可以使用较短的版本:

/^([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
于 2013-08-02T04:38:07.293 回答
0

这可以通过

return myObj.mask.test(value)
于 2013-08-02T04:36:10.857 回答