我需要接受一个名字作为输入,并检查第一个字母是大写字母,并且在字符串末尾之后可以有1个空格。

此RegEx适用于'Bob':

^[A-Z][A-Za-z\p{L}]+[\s,.'\-]?[a-zA-Z\p{L}]*$


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

此RegEx的俄语名称为“Афанасий”

^[A-Z\p{L}][A-Za-z\p{L}]+[\s,.'\-]?[a-zA-Z\p{L}]*$


...但是,尽管它允许使用unicode,但它还允许我输入带有小写首字母的'bob',而RegEx允许这样做。

有什么方法可以允许unicode并在首字母不大写时仍标记第一个字母? (使用正则表达式)

我可以进行一些代码更改来解决此问题,但是能够在不进行代码更改的情况下将其全部保留在RegEx值中将是很好的。

最佳答案

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



^\p{Lu}\p{L}+[\s,.'\-]?\p{L}*$


要么

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


请参见regex demo 1regex demo 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字母

$-字符串结尾。

09-25 18:28
查看更多