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的正则表达式解决了这个问题。