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