有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java、Regex:为firstname添加umlaut和其他德语字符

我想用Regex验证用户发送的名字。我发现名字有多个表达式,但我还想在其中添加德语字符,如äöüß和法语字符à À è È é É ù Ù ì Ì ò Ò ñ Ñ。我尝试了SOhere建议的正则表达式求值器,但没有帮助。无论我何时制作一个额外的方括号,它都会告诉我Your regular expression does not match the subject string.。我做错了什么

当前正则表达式模式:

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

多谢各位


共 (2) 个答案

  1. # 1 楼答案

    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}'-]+)*"
    
  2. # 2 楼答案

    我同意Wiktor先前的回答

    但要回答为什么您的正则表达式不起作用:

    您希望大写字母后跟0个或多个字母和空格,然后是另一个单词。另一个词是1个cap。字母,1个字母,然后是0个或更多字母。我不知道有什么合适的名字。所有这些特殊字符应与字母在同一[]中

    此外,不允许使用连字符的名称

    所以你的正则表达式看起来更像这样:

    ^([A-ZÜÄÖ][a-züäöß]*(\s|-))*[A-ZÜÄÖ][a-züäöß]*$