正则表达式允许在字符串中使用连字符(最多 3 个),但不计算 JAVA 中的长度
RegEx to allow hyphens (maximum 3) in a string but do not count it in length in JAVA
我的要求是将输入字符串的长度限制为 11,可以是带连字符的字母数字。允许的最大连字符数为 3,不应考虑连字符的长度。另一个要求是连续重复数字不能超过5个。
我的正则表达式是 ^(?!.*([0-9])\1{5})(?=.*([-]){0,3})[a-zA-Z0-9]{11}$
非常感谢任何帮助。
好吧,一种方法是:
^(?!.*?(\d){5})(?=(?:[a-z0-9]-?){11}$)[a-z0-9]+(?:-[a-z0-9]+){0,3}$
在线查看demo
^
- Start-line锚点;
(?!.*?(\d){5})
- 断言输入的否定前瞻没有重复 6 次的数字;
(?=(?:[a-z0-9]-?){11}$)
- 肯定前瞻断言输入有 11 个字母数字字符(带有可选的连字符);
[a-z0-9]+(?:-[a-z0-9]+){0,3}
- 1+ Alnum 字符后跟 non-capture 组(0-3 次)以允许使用连字符;
$
- End-line锚.
请注意,它不允许连字符位于以下任一位置:开始、结束或连续。进一步注意,我使用了 case-insensitive 标志。
我的要求是将输入字符串的长度限制为 11,可以是带连字符的字母数字。允许的最大连字符数为 3,不应考虑连字符的长度。另一个要求是连续重复数字不能超过5个。
我的正则表达式是 ^(?!.*([0-9])\1{5})(?=.*([-]){0,3})[a-zA-Z0-9]{11}$
非常感谢任何帮助。
好吧,一种方法是:
^(?!.*?(\d){5})(?=(?:[a-z0-9]-?){11}$)[a-z0-9]+(?:-[a-z0-9]+){0,3}$
在线查看demo
^
- Start-line锚点;(?!.*?(\d){5})
- 断言输入的否定前瞻没有重复 6 次的数字;(?=(?:[a-z0-9]-?){11}$)
- 肯定前瞻断言输入有 11 个字母数字字符(带有可选的连字符);[a-z0-9]+(?:-[a-z0-9]+){0,3}
- 1+ Alnum 字符后跟 non-capture 组(0-3 次)以允许使用连字符;$
- End-line锚.
请注意,它不允许连字符位于以下任一位置:开始、结束或连续。进一步注意,我使用了 case-insensitive 标志。