Java,Regex:为名字添加变音符号和其他德语字符

时间:2016-11-23 12:32:08

标签: java regex

我想验证用户使用Regex发送的第一个名字。我找到了第一个名字的多个表达式,但我还想添加像äöüß和法语à À è È é É ù Ù ì Ì ò Ò ñ Ñ这样的德语字符。我试过SO here建议的正则表达式评估器,但这没有用。无论我做一个额外的方括号,它都会告诉我Your regular expression does not match the subject string.。我做错了什么?

当前正则表达式模式:

^([A-Z][a-z]*((\s)))+[A-Z][a-z][äöüß]*$

谢谢。

2 个答案:

答案 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üäöß]*$