【问题标题】:Regex for alphabetic numeric and - '字母数字的正则表达式和 - '
【发布时间】:2017-10-17 08:40:29
【问题描述】:

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

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

所以字符串如下: "'s 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。 应该是假的,因为里面有##@@这个字符。

感谢您的帮助。

【问题讨论】:

  • 使用var regex = /^[a-zA-Z0-9\s'-]+$/; - 添加锚点并使用正则表达式。
  • 是的,我已经测试了@WiktorStribiżew 解决方案并且工作正常:)
  • Wiktor,你是我的英雄 ;) 有时很难看出正则表达式有什么问题。请将您的答案作为答案发布,以便我接受。
  • 我正在写所有的解释。
  • Wiktor 确实是每个人的英雄 :)

标签: javascript jquery regex


【解决方案1】:

new RegExp("([a-zA-Z0-9\s'-])+") regex 查找 部分 匹配项,即它在较大的字符串中查找字母、数字、'- 的条纹,并将返回一旦找到匹配项。 注意它找不到 空格,因为字符串文字中的 \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>

【讨论】:

  • 我还要问你一件事.. 我怎样才能接受带有 ë ö ï ï ê 之类的字符?对于像 Chloë 这样的名字/单词。
  • 使用XRegExp,您将能够使用匹配任何Unicode字母的\pL。否则,为接受的字母构建一个 Unicode 代码点范围,请参阅Javascript + Unicode regexes。不幸的是,当前的本机正则表达式 JS 实现不支持 Unicode 属性类。另请参阅this answer of mine,或更好地导入 XRegExp like here
  • 如果您只匹配一些欧洲字母,请参阅Regular expression not working for at least one European character,添加À-ÿ 可能就是您想要的模式。由于该范围包括乘除符号,您可以添加 À-ÖØ-öø-ÿ 而不是 À-ÿ
  • @Elvira 此要求超出了当前问题的范围。这里还有很多其他线程讨论如何在 JS 中将 Unicode 字符与正则表达式匹配。
猜你喜欢
  • 2011-09-16
  • 2015-10-24
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 2010-09-25
  • 1970-01-01
相关资源
最近更新 更多