.net 正则表达式表示超过 5 个连续字母



我正在尝试为超过 5 个连续的字母编写一个 .Net 正则表达式。

DFHJVUDYFYREAAAAA - 不允许

dfhjvudyfyreAAAAA - 不允许

dfhjvAAAAAfyreAAA - 不允许

dfhjvAAAfyresdAAA - 允许

dfhjvAAAf3434yresdA - 允许

到目前为止,我已经尝试了一些注册 exp,但没有按照我的要求工作。

我的要求如下

  1. 字符串长度应小于 25 个字符
  2. 字符串仅是字母/数字的组合,不允许使用特殊字符。

已尝试的解决方案

  1. ^(?=.{1,25}$((([a-zA-Z0-9](\5?(?!\5((+$
  2. (?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)

最新更新