我在 Java 中使用以下正则表达式来匹配用户名:
^(?!.*\\..*\\..*)[A-Za-z]([A-Za-z0-9.]*[A-Za-z0-9]){8,15}$
我希望这个正则表达式与包含所有字母数字字符(以字母开头)的字符串匹配,中间最多允许一个句点(点),大小在 8 到 15 之间。
因此,它有两个问题:
- 它不接受长度为 8 的字符串。它接受最小长度为 9 的字符串。
- 长度没有上限。它匹配任何长度超过 8 个字符的字符串。
为什么不考虑 {8,15}
?
最佳答案
问题 1:您正在量化需要至少一个 [A-Za-z0-9]
和任意数量的 [A- Za-z0-9.]
之前。因此已经需要至少 8 个字符。另外,您的正则表达式在此构造之前至少需要一个 [A-Za-z]
= 9 个字符。
问题 2:您正在量化包含 [A-Za-z0-9.]*
任意数量和此 {8,15 }
所以上限是 15x(any amount) = ∞
猜猜您要查找的正则表达式与这个类似:
^(?![^.]*\\.[^.]*\\.)[A-Za-z](?:\\.?[A-Za-z0-9]){7,14}$
关于java - 正则表达式不遵守长度限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45655225/