RegEx的名称:任何语言,但首字母必须是大写

Kev*_*Kev 4 regex

我要求接受名字作为输入,并检查第一个字母是否为大写字母,并且字符串结尾后可以有1个空格.

此RegEx适用于'Bob':

^[A-Z][A-Za-z\p{L}]+[\s,.'\-]?[a-zA-Z\p{L}]*$
Run Code Online (Sandbox Code Playgroud)

然后,额外的要求是允许任何涉及允许unicode的语言/字符.

此RegEx适用于俄语名称:'Афанасий'

^[A-Z\p{L}][A-Za-z\p{L}]+[\s,.'\-]?[a-zA-Z\p{L}]*$
Run Code Online (Sandbox Code Playgroud)

...但是,虽然它允许使用unicode,但它也允许我输入带有小写字母的"bob",RegEx允许通过.

是否有任何方法允许unicode并且仍然在不是资本时标记第一个字母?(使用RegEx)

我可以进行一些代码更改来解决这个问题但是能够将它全部保存在RegEx值而不进行代码更改会很好.

Wik*_*żew 5

可以匹配任何Unicode大写字母\p{Lu}.

使用

^\p{Lu}\p{L}+[\s,.'\-]?\p{L}*$
Run Code Online (Sandbox Code Playgroud)

要么

^\p{Lu}\p{L}+(?:[\s,.'-]\p{L}+)?$
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示1正则表达式演示2.第二个正则表达式更精确,因为它不允许尾随空格,逗号等(在[\s,.'-]字符类中定义的内容).

请注意,[A-Za-z\p{L}]由于\p{L}已经匹配,因此没有任何意义[a-zA-Z].

图案细节:

  • ^ - 字符串的开头
  • \p{Lu} - 大写的Unicode字母
  • \p{L}+ - 一个或多个Unicode字符
  • (?:[\s,.'-]\p{L}+)? - 一个或零(可选)序列
    • [\s,.'-]-一个空白,,,.,'或连字符
    • \p{L}+ - 1个或多个Unicode字母
  • $ - 字符串结尾.