在javascript对象属性中使用正则表达式集

在javascript对象属性中使用正则表达式集,javascript,regex,Javascript,Regex,我必须使用在javascript的object属性中设置的正则表达式,如下所示 var myObj = { mask : /([a-z]|[A-Z]|[0-9]|-|\.|\'|[&])/} 在另一个函数中,它将获得myObj作为参数,在该函数中,我需要测试字符串是否包含正则表达式上方任何不匹配的字符。 范例 这可以通过以下方式完成: return myObj.mask.test(value) 你的正则表达式是非常多余的,你正在做很多不必要的转义。您可以使用较短的版本: /^([a-

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

var myObj = { mask : /([a-z]|[A-Z]|[0-9]|-|\.|\'|[&])/}
在另一个函数中,它将获得
myObj
作为参数,在该函数中,我需要测试字符串是否包含正则表达式上方任何不匹配的字符。 范例

这可以通过以下方式完成:

return myObj.mask.test(value)

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

/^([a-zA-Z0-9-.'&])*$/
注意,我添加了一些锚,它们是
RegExp.test()所必需的

解释
/^([a-zA-Z0-9-.&])*$/
  • ^
    字符串的开头
  • 组和捕获开始组1
  • [a-zA-Z0-9-.&]
    的任何字符:
    a
    z
    a
    z
    0
    9
  • 第1组结束
  • *
    第1组零次或多次
  • $
    结束 串
  • 它比原始版本更简单,因为
    [a-z]|[a-z]
    [a-zA-z]
    相同。此外,在字符类内部(即在
    [
    ]
    之间),您不必转义
    '
    &

    如果你不能改变这个表达式 在这种情况下,我们可以创建一个新的
    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
    

    我认为这是个错误的答案(也可以是@user1671639)。OP想测试“如果字符串包含任何与正则表达式不匹配的字符”。所以
    'abcd#'
    应该为false,因为它包含
    '#'
    。感谢您的响应,但如果该值甚至包含一个特殊字符,如$%^#,那么它会返回false吗?是的,它会返回false。我假设您希望abc返回false。这正是它要做的。abc将返回true。我只是告诉你如何测试一个正则表达式,而不是重新格式化它想知道你的正则表达式的一个简短的解释
    /^([a-zA-Z0-9-.&])*$/
    一个疑问,如果用
    来代替
    *
    那不好吗?@user1671639我补充了一些解释。你能检查一下它是否足够好吗?
    返回新的RegExp('^('+myObj.mask.source+')*$).test(value)
    @rps With
    它将不匹配任何内容,因此我猜它不合适。检查此测试:(打开控制台F12)。当您想要选择
    *
    将影响谁时,
    ()
    是必需的。它们还组成组,可通过
    $1
    访问。没必要道歉。请随便问。如果我能帮忙,我很乐意。询问代码的问题必须表明对正在解决的问题的最低理解。包括尝试过的解决方案、它们不起作用的原因以及预期结果。
    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
    
    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