我想验证用户使用Regex发送的第一个名字。我找到了第一个名字的多个表达式,但我还想添加像äöüß
和法语à À è È é É ù Ù ì Ì ò Ò ñ Ñ
这样的德语字符。我试过SO here建议的正则表达式评估器,但这没有用。无论我做一个额外的方括号,它都会告诉我Your regular expression does not match the subject string.
。我做错了什么?
当前正则表达式模式:
^([A-Z][a-z]*((\s)))+[A-Z][a-z][äöüß]*$
谢谢。
答案 0 :(得分:6)
It is not a good idea to restrict people's names too much,我建议使用相当通用的正则表达式:
s.matches("(?U)[\\p{L}\\p{M}\\s'-]+")
此正则表达式将匹配仅包含1个或多个Unicode字母,变音符号,空格,撇号或连字符的字符串。
如果您需要更多限制性检查,例如空格可能只出现在字符串内,并且只有在不连续时才使用分组:
"(?U)[\\p{L}\\p{M}'-]+(?:\\s[\\p{L}\\p{M}'-]+)*"
答案 1 :(得分:0)
我同意Wiktor之前的回答。
但要回答为什么你的正则表达式不起作用:
您希望大写字母后跟0个或更多字母和空格,然后是另一个单词。而另一个词是1个上限。字母,1个字母,然后0个或更多的变形金刚。我不知道任何适合的名字。所有这些特殊字符应与字母相同[]。
也不允许使用带连字符的名称。
所以你的正则表达式看起来更像是这样:
^([A-ZÜÄÖ][a-züäöß]*(\s|-))*[A-ZÜÄÖ][a-züäöß]*$