字母数字的正则表达式 - ''

时间:2017-10-17 08:40:30

标签: javascript jquery regex

我一直在尝试不同的正则表达式,但我似乎无法找到正确的正则表达式。

我需要一个正则表达式,允许用户在文本中键入字母,数字,空格和 - 。

所以字符串如: “是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。 它应该是假的,因为字符## @@在其中。

感谢您的帮助。

1 个答案:

答案 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;
&#13;
&#13;