正则表达式匹配名称

时间:2010-04-27 13:54:21

标签: javascript regex

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

jhon's
avat-ar
Josh

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

3 个答案:

答案 0 :(得分:9)

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

在这里,

  • ^表示字符串的开头,$表示字符串的结尾。
  • […]是一个字符类,其中的任何内容都将匹配。
  • x+表示在重复一次或多次之前的模式。

在角色类中,

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

请注意,此课程不会与国际字符匹配,例如一个。你必须单独包括它们,例如

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

答案 1 :(得分:1)

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

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

说明:

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

请注意,如果连字符是类定义中的最后一个字符,则不需要转义。如果短划线出现在类定义的其他位置,则需要进行转义,因为它将被视为范围字符,而不是连字符。

答案 2 :(得分:0)

更紧凑的版本是[\w'-]+