将连字符包含到这个正则表达式中,怎么样?

新手上路,请多包涵

我有这个正则表达式:

   var alphaExp = /^[a-zA-ZåäöÅÄÖ\s]+$/;

这是用于表单验证中的名称字段。

我需要能够输入像“Anna-nicole”这样的名字(注意连字符)。目前,连字符会导致错误。

我需要重新制作这个正则表达式,以便名称中可以包含一个连字符;最好我应该这样做,以便名称也 不能 以连字符开头或以连字符结尾。只允许在“单词或名称”之间使用连字符。

有人知道怎么做这个吗?

顺便说一句,它是 JavaScript。

原文由 user188962 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 287
2 个回答

您必须使用反斜杠转义减号。

 var alphaExp = /^[a-zA-ZåäöÅÄÖ\s\-]+$/;

要阻止他们在开始或结束时使用它,请尝试以下操作:

 var alphaExp = /^[a-zA-ZåäöÅÄÖ\s]+[a-zA-ZåäöÅÄÖ\s\-]*[a-zA-ZåäöÅÄÖ\s]+$/;

原文由 Emil H 发布,翻译遵循 CC BY-SA 2.5 许可协议

在许多正则表达式方言中,在字符类中,一个简单的连字符/减号需要放在第一个或最后一个:

 /^[-a-zA-ZåäöÅÄÖ\s]+$/
/^[a-zA-ZåäöÅÄÖ\s-]+$/

否定字符类:

 /^[^-a-zA-ZåäöÅÄÖ\s]+$/
/^[^a-zA-ZåäöÅÄÖ\s-]+$/

也有封闭的方括号,把方括号放在前面,把连字符放在最后:

 /^[]a-zA-ZåäöÅÄÖ\s-]+$/

如果您需要同时排除方括号和连字符,则:

 /^[^]a-zA-ZåäöÅÄÖ\s-]+$/

对于这个问题,一种解释可能是:您想在连字符周围坚持使用字母字符,并且只想在开头和结尾允许空格,并且您可能希望在允许连字符的地方允许撇号,并且您希望避免连续的连字符或撇号。

 /^\s*[a-zA-ZåäöÅÄÖ]*([a-zA-ZåäöÅÄÖ]+[-'][a-zA-ZåäöÅÄÖ]+)*\s*$/

警告:正则表达式是用 Perl 而非 JavaScript 正式测试的。

字符串开头,零个或多个空格;零个或多个字母字符; “一个或多个字母字符加上连字符或撇号和一个或多个字母字符”的零个或多个序列,后跟字符串结尾。您可以在第一个 \s* 之后和第二个 \s* 之前加上一组额外的括号以捕获整个名称。

对于 Anna-nicole ,第一个字母项将匹配 Ann ,而另一个字母项将匹配 a-nicole 。对于 Anonymous ,第一项将匹配整个字符串,第二项将为空。对于 O'Reilly ,第一项将为空,第二项将匹配整个字符串。诸如“C–d”和“Who”Me”之类的名称将被拒绝(不允许重复的连字符或撇号)。它将允许 Smith-Jones-and-Son 作为名称,并且 Smith-And-O'Reilly 。它不允许前导或尾随连字符或撇号。

如果你想允许“名姓”,你需要两批上面正则表达式的“核心”,中间有 \s+ 。等等。

原文由 Jonathan Leffler 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题