【问题标题】:Regular expression to match a name匹配名称的正则表达式
【发布时间】:2010-04-27 13:54:21
【问题描述】:

我正在尝试在 Javascript 中编写一个正则表达式来匹配名称字段,其中唯一允许的值是字母、撇号和连字符。例如,应匹配以下名称:

jhon's
avat-ar
Josh

有人可以帮我构建这样的正则表达式吗?

【问题讨论】:

  • 首先,定义“字母”。因为他们太多了
  • 字母将是大写和小写的“a 到 z”,因为它们是输入名字和姓氏字段所必需的
  • 好吧!你在这里有一个有效的观点,但我的需求文档只是说字母,邮政和连字符......我什至不知道'JürgenMüller'中的那些'u'是什么......但我会很好奇知道这些字符叫什么,我们如何想出正则表达式来匹配它们......
  • @zoom:我想是时候回过头来澄清您的要求了。 ;) 每次人们发现世界上的字母比 US-ASCII 的字母多时,我都会感到困惑。

标签: javascript regex


【解决方案1】:

是的。

^[a-zA-Z'-]+$

这里,

  • ^ 表示字符串的开头,$ 表示字符串的结尾。
  • […] 是一个字符类,它里面的任何东西都会被匹配。
  • x+ 表示可以重复一次或多次之前的模式。

在字符类中,

  • a-zA-Z 是大小写字母,
  • ' 是撇号,并且
  • - 是连字符。连字符必须出现在开头或结尾以避免与a-z 中的范围分隔符混淆。

请注意,此类不会匹配国际字符,例如一种。您必须单独包含它们,例如

^[-'a-zA-ZÀ-ÖØ-öø-ſ]+$

【讨论】:

  • @Robert - 没有。 “-”的开头和结尾都可以
  • 我认为这对我有用,但如果你能给我一些关于你如何构建它的信息会很棒......除了连字符的位置(在开始和结束时)在你的正则表达式中会起作用(正如上面评论中提到的 DVK)和 + 符号的意义......只是为了我的理解!谢谢!
  • @KennyTM:这确实很有帮助......非常感谢!我应该开始更多地研究正则表达式...谢谢
【解决方案2】:

UTF-8 世界的紧凑版本,将匹配国际字母和数字。

/^[\p{L}\p{N}*-]+$/u

解释:

  • [] => 字符类定义
  • p{L} => 匹配来自任何语言的任何字母字符
  • p{N} => 匹配任何类型的数字字符
  • *- => 匹配星号和连字符
  • + => 量词 - 匹配一次到无限次(贪婪)
  • /u => Unicode 修饰符。模式字符串被视为 UTF-16。还 导致转义序列匹配 unicode 字符。

注意,如果连字符是类定义中的最后一个字符,它不需要转义。如果破折号出现在类定义的其他位置,它需要转义,因为它将被视为范围字符而不是连字符。

【讨论】:

  • 其他语言的不错的解决方案,但它也匹配数字。它将匹配“John091”甚至“123”。在 C# 中测试
  • 它在 javascript 中抛出异常:Uncaught SyntaxError: Invalid regular expression: /^[\p{L}\p{N}*-]+$/: Invalid escape
【解决方案3】:

更简洁的版本是[\w'-]+

【讨论】:

猜你喜欢
  • 2016-01-22
  • 1970-01-01
  • 2013-02-17
  • 2013-12-04
  • 1970-01-01
  • 2021-11-21
  • 2016-03-25
  • 2018-10-11
  • 1970-01-01
相关资源
最近更新 更多