我正在尝试为连续5个以上的字母写一个.Net Regex。
dfhjvudyfyreaaaaa - 不允许
dfhjvudyfyreAAAAA - 不允许
dfhjvAAAAAfyreAAA - 不允许
dfhjvAAAfyresdAAA - 允许
dfhjvAAAf3434yresdA - 允许
到目前为止,我已经尝试了一些reg exp,但是没有按照我的要求工作。
我的要求低于
已尝试解决方案
我将使用字符串来表示车辆发动机编号或底盘编号。
我很好,如果JavaScript中有可能的解决方案。
我们可以在.net中构建这种类型的正则表达式吗?
答案 0 :(得分:2)
使用不区分大小写的标记,您可以使用否定前瞻来编写它以测试是否有五个连续的字符:
^(?!.*(.)\1{4})[A-Z0-9]{1,25}$
答案 1 :(得分:1)
这是一个可能的解决方案:
^(?![a-zA-Z0-9]*([a-zA-Z0-9])\1{4})[a-zA-Z0-9]{1,24}$
请参阅regex demo。
<强>详情
^
- 字符串开头(?![a-zA-Z0-9]*([a-zA-Z0-9])\1{4})
- 字符串[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)