【问题标题】:Java Regex for username用户名的 Java 正则表达式
【发布时间】:2012-10-31 13:11:26
【问题描述】:

我正在寻找 Java 中的正则表达式 java.util.regex,以仅接受字母 -. 以及一系列 Unicode 字符,例如变音符号、eszett、变音符号和其他有效字母来自欧洲语言。 我不想要的是数字、“ ”“ Tom” 等空格,或!”£$% 等特殊字符。

到目前为止,我发现它非常混乱。

我从这个开始

[A-Za-z.\\s\\-\\.\\W]+$

最后是这样的:

[A-Za-z.\\s\\-\\.\\D[^!\"£$%\\^&*:;@#~,/?]]+$

根据the documentation,使用cavat 表示没有内方括号

任何人对新的正则表达式有任何建议或上述不起作用的原因?

【问题讨论】:

  • 您是否收到错误消息,或者只是不匹配。在这两种情况下,请告诉我们更多信息到底发生了什么。
  • 一个问题可能是您使用\\D。在否定字符类中使用\\d。此外,您应该在开头添加^。否则,如果字符串的最后一个字符是允许的字符之一,则您的正则表达式将匹配。

标签: java regex


【解决方案1】:

对于我的回答,我想使用与您类似的更简单的正则表达式:[A-Z[^!]]+,这意味着“至少一次:(从 A 到 Z 的字符)或(不是'!'的字符)。 请注意,"not '!'" 已经包含 A 到 Z。所以外部字符组 ([A-Z...) 中的所有内容都没有意义。

尝试[\p{Alpha}'-.]+ 并使用Pattern.UNICODE_CHARACTER_CLASS 标志编译正则表达式。

【讨论】:

    【解决方案2】:

    使用:(?=.*[@#$%&\s]) - 当至少一个特殊字符(来自集合)以及用户名包含空格时返回 true。

    您可以根据需要添加更多特殊字符。例如:

    String str = "k$shor";
    String regex = "(?=.*[@#$%&\\s])";
    Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(str);
    System.out.println(matcher.find()); => gives true
    

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 2011-07-12
      • 1970-01-01
      • 2011-01-19
      • 2012-01-28
      相关资源
      最近更新 更多