我一直在尝试不同的正则表达式,但我似乎无法找到正确的正则表达式。
我需要一个正则表达式,允许用户在文本中键入字母,数字,空格和 - 。
所以字符串如: “是Ochtends vroeg” “明天晚上” “ISBN1234ABC”
应该是真的。
我使用以下代码尝试了以下正则表达式:
/([A-Za-z0-9'-\s])/g
[^#$@_&!*()]
and more of these variations
var regex = new RegExp("([a-zA-Z0-9\s'-])+");
console.log(regex.test(word));
当我输入“ABN ## @@ 123-TEST”字样时,现在全部返回true。 它应该是假的,因为字符## @@在其中。
感谢您的帮助。
答案 0 :(得分:2)
new RegExp("([a-zA-Z0-9\s'-])+")
正则表达式找到部分匹配,即它在内部找到字母,数字,'
或-
的条纹更大的字符串,一旦找到就会返回匹配。 注意它找不到空格,因为字符串文字中的\s
被解析为字母s
,而不是\s
空格模式
所以,你需要做两件事:
^
,在模式结尾添加$
以确保整个字符串匹配/regex/
,以确保将\s
解析为空格模式。请注意,您不需要将整个模式包装在捕获组中,您始终可以访问整个正则表达式匹配值(即使在使用$&
反向引用替换时)。因此,您可以删除模式周围的(
和)
。
因此,您的解决方案是
var regex = /^[a-zA-Z0-9\s'-]+$/;
JS演示:
function test() {
var str = document.getElementById("text").value;
var regex = /^[a-zA-Z0-9\s'-]+$/;
if (regex.test(str)) {
console.log("Valid");
}
else {
console.log("Not Valid");
}
}

<input id="text" type="text" />
<button id="btn" onclick="test()">Test</button>
&#13;