java - 用户名的正则表达式

标签 java regex

我想在 Java 中创建一个使用正则表达式验证用户名的方法。 但我不擅长 Regex 创建,这是一个复杂的问题。 我将不胜感激您的任何帮助-建议

我希望用户名符合这些规则:

  1. 不超过9个字符
  2. 不少于3个字符
  3. 下划线连字符(“_”和“-”)外没有特殊字符
  4. 这两个字符不能是一个接一个,也不能是 用户名不能以它们开头或结尾

我只知道如何应用规则号。 3

String Regex = "^[\w-]+$";

注意:规则 1. 和 2. 对于正则表达式并不重要,因为我可能会使用 java 进行这些检查。但我想知道怎么走。

最佳答案

让我们看一下您的规则:

  1. No more than 9 characters
  2. No less than 3 characters

这两个可以在适用于您的整个用户名的量词 {3,9} 中分组。您已经使用了表示“一个或多个”的 + 量词,您可以删除那个。

"^[\w\s-]{3,9}$"

  1. No special characters except underscore and hyphen ("_" and "-")

您已经介绍了这一点,但请注意 \s 表示空格。你没有在你的问题中提到空格,你确定你需要那些吗?


  1. Those two characters can't be the one after the other and the username can't start or end with them

这里变得更加棘手。你需要 lookaround assertions一项一项地执行这些规则。

首先让我们从“那两个角色不能是一个接一个”开始。您可以在正则表达式之前使用否定前瞻来检查其中两个是否在一起:

(?!.*[-_]{2,})

?! 表示“即将到来的字符串不应该匹配以下正则表达式”(又名否定前瞻),[-_]{2,} 表示“两个或多个下划线/破折号”。

规则的下一部分是“不能以它们开始或结束”。我们可以为此创建两个单独的负面前瞻(不以这些字符开始和结束),但正如评论中指出的那样,您也可以将它们组合成一个正面前瞻:

(?=^[^-_].*[^-_]$)

这表示即将到来的字符串必须(正)匹配“无 - 或 _,然后是任意数量的字符,然后再次无 - 或 _”。


将所有这些前瞻与原始正则表达式结合起来,您就会得到答案:

"^(?!.*[-_]{2,})(?=^[^-_].*[^-_]$)[\w\s-]{3,9}$"

您可以使用此工具来测试正则表达式是否匹配多个输入以确定它是否正常工作:http://www.regexplanet.com/advanced/java/index.html

关于java - 用户名的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30012770/

相关文章:

java - Spring http 出站网关 - 如何返回带有正文的 ResponseEntity

java - 完成一些搜索逻辑

python - 用相应的减法结果替换字符串中的数字

java - 使用正则表达式将字符串与 JSON 字符串进行匹配

c# - 点字模式匹配

java - MouseEvents 和 Icon/ImageIcon

java - Android 日期时间解析

java网络爬虫

regex - Perl:如何逐行搜索文本文件以查找特定模式?

java - jackson 使用 spring 的接口(interface)列表反序列化对象