正则表达式匹配单个名字字符串或首字母和姓氏字符串,一个空格和一个连字符

时间:2014-02-11 16:02:01

标签: javascript

正则表达式,用于匹配单个名字字符串或带有一个空格和一个连字符的名字和姓氏字符串。

有效匹配

  1. Mathias d-arras
  2. Martin Luther
  3. 赫-香肠
  4. 的Mathias
  5. John-Paul Mathias
  6. Jhon S
  7. K Jhon
  8. k jhon-m
  9. J-m k
  10. k j-m
  11. 无效匹配

    1. Mathias d arras
    2. Mathias- darras
    3. Hector -Sausage
    4. Hector Sau K
    5. 赫-秀-K
    6. Hector Sausage -
    7. a-a aa-a
    8. a-a aa a
    9. Jean-Paul Simmons-Beckett
    10. a-a a-a
    11. a a a

3 个答案:

答案 0 :(得分:1)

试试这个:

/^[a-z]+(?:-[a-z]+)?(?:\s[a-z]+(?:-[a-z]+)?)$/gim

DEMO

答案 1 :(得分:1)

此模式将正确匹配您提供的示例数据(我假设您实际上只想允许空格[],而不是所有空格[\s],这也包括标签,换行符等):

/^[a-z]+( [a-z][a-z-]+||-[a-z]+)?$/i

尽管如此,我想知道您的样本数据中是否没有其他情况,例如:

  • John-Paul Mathias (有效,但会失败?)
  • Hector Sausage- (无效,但会通过?)

如果需要,还需要进行一些调整来处理这些问题。

另外,我遗漏了gm标志,因为这看起来像是模式验证,在这种情况下,我认为你不需要它们。如果你真的需要在多行情况下捕获这个模式的多个实例,那么你需要放回那些标志。

<强>更新

好的,基于其他测试数据,以下正则表达式将起作用:

/^[a-z]+-?[a-z]+( [a-z]+-?[a-z]+)?$/i

我一直觉得有一种方法可以将其削减得更多,但-字符之间的复杂关系使其变得困难。

更新#2:

已更新以匹配更多样本数据。 :d

/^[a-z]+(-[a-z]+)?( [a-z]+(-[a-z]+)?)?$/i

更新#3:

好的。 。 。另一个更新,为新的“连字符”要求。 :)

/^[a-z]+(-[a-z]+( [a-z]+)?||( [a-z]+)(-[a-z]+)?)?$/i

答案 2 :(得分:0)

请尝试这种模式:

/^[a-z]+\s?[a-z]+\-?[a-z]+$/gim

好的,我为你更新了

DEMO:P