我需要接受一个名字作为输入,并检查第一个字母是大写字母,并且在字符串末尾之后可以有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 1和regex 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字母$
-字符串结尾。