我正在尝试为超过 5 个连续的字母编写一个 .Net 正则表达式。
DFHJVUDYFYREAAAAA - 不允许
dfhjvudyfyreAAAAA - 不允许
dfhjvAAAAAfyreAAA - 不允许
dfhjvAAAfyresdAAA - 允许
dfhjvAAAf3434yresdA - 允许
到目前为止,我已经尝试了一些注册 exp,但没有按照我的要求工作。
我的要求如下
- 字符串长度应小于 25 个字符
- 字符串仅是字母/数字的组合,不允许使用特殊字符。
已尝试的解决方案
- ^(?=.{1,25}$((([a-zA-Z0-9](\5?(?!\5((+$
- (?i((.(\1\1
我将使用字符串来表示车辆发动机编号或底盘编号。
我很奇怪,如果 JavaScript 中可能有解决方案。
我们可以在 .net 中构建这种类型的正则表达式吗?
使用不区分大小写的标志,您可以使用负前瞻来编写它,以测试是否没有五个连续字符:
^(?!.*(.)1{4})[A-Z0-9]{1,25}$
这是一个可能的解决方案:
^(?![a-zA-Z0-9]*([a-zA-Z0-9])1{4})[a-zA-Z0-9]{1,24}$
请参阅正则表达式演示。
详
^
- 字符串的开头(?![a-zA-Z0-9]*([a-zA-Z0-9])1{4})
- 字符串内任何地方都没有 5 个连续的字母数字字符[a-zA-Z0-9]{1,24}
- 1 到 24 个字母数字字符$
- 字符串的结尾。
如果设置了不区分大小写的标志,则会使反向引用也不区分大小写(aaAAA
也会使匹配失败(。在 .NET 中,可以将标志作为选项传递RegexOptions.IgnoreCase
在 JS 中,添加i
修饰符。
C# 实现:
bool valid = Regex.IsMatch(input, @"^(?![a-z0-9]*([a-z0-9])1{4})[a-z0-9]{1,24}z", RegexOptions.IgnoreCase);
我建议在 .NET 中z
,因为它总是在字符串的最后匹配,而$
可以在最后一个换行符之前匹配(在 JS 中不是这种情况(。
在 JS 中,您可以使用
var valid = /^(?![a-z0-9]*([a-z0-9])1{4})[a-z0-9]{1,24}$/i.test(s)