我要求接受名字作为输入并检查第一个字母是否为大写字母,并且在字符串结尾后可以有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)
我可以进行一些代码更改以解决这个问题,但是能够将它全部保存在RegEx值中而不进行代码更改会很好。
答案 0 :(得分:5)
任何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}+
- 一个或多个Unicode字母$
- 字符串结束。