Java 用户名的正则表达式不起作用

Java 用户名的正则表达式不起作用,java,regex,Java,Regex,以下是用于验证用户名的正则表达式: ^([a-zA-Z0-9]+([\\s.]?[a-zA-Z0-9]+)*){6,20}$ 用户名应介于6-20个字符之间,后跟空格或句点(.) 但对于以下示例,此正则表达式失败,即使整个字符串长度(包括空格)至少为6个字符: 乔·吉姆 亚当·里克 任何帮助都将不胜感激 您可以使用正向前瞻来确保包含6到20个字符: ^(?=.{6,20}$)[a-zA-Z0-9]+([\\s.][a-zA-Z0-9]+)*$ ^----------^ 您不应该真的需要?来

以下是用于验证用户名的正则表达式:

^([a-zA-Z0-9]+([\\s.]?[a-zA-Z0-9]+)*){6,20}$
用户名应介于
6-20个
字符之间,后跟
空格
句点(.)

但对于以下示例,此正则表达式失败,即使整个字符串长度(包括空格)至少为6个字符:

  • 乔·吉姆
  • 亚当·里克

  • 任何帮助都将不胜感激

    您可以使用正向前瞻来确保包含6到20个字符:

    ^(?=.{6,20}$)[a-zA-Z0-9]+([\\s.][a-zA-Z0-9]+)*$
     ^----------^
    

    您不应该真的需要
    来表示此处的空格/句点。

    您可以将您的用户与此匹配

    ^([a-zA-Z0-9\s\.]){6,20}$
    
    这可能不仅仅与您的登录匹配。 因为这将匹配多个空格或周期。 您可以使用另一个正则表达式来表示您登录时只有一个周期或空格

    ^[a-zA-Z0-9]+[\s\.]?[a-zA-Z0-9]+$
    

    希望有帮助。

    您还需要避开“.”,因为正则表达式中的“.”表示“任何字符”,谢谢您的突出显示!请注意,在字符类中不需要转义元字符,除非它是短划线
    -
    ,如果它位于未在某个范围内使用的两个字符之间,或者是插入符号
    ^
    ,如果它位于类的开头。我真的不希望空格或句点在字符之间出现多次。另外,我不想允许任何其他特殊字符。使用此$,#被接受。@root您是否测试了正则表达式?此处不接受任何
    $
    #
    。仅接受
    [a-zA-Z0-9]
    以及空格和句点。并且不接受连续的空格/句点。我没有用\s替换\\s,也没有跳过句点,这样做使您的正则表达式工作!!谢谢在强制执行{6,20}个字符的限制后,会导致相同的问题。顺便说一句,通过Jerry的正则表达式解决了这个问题。