.net Regex连续超过5个字母

时间:2017-07-09 07:17:10

标签: javascript .net regex

我正在尝试为连续5个以上的字母写一个.Net Regex。

dfhjvudyfyreaaaaa - 不允许

dfhjvudyfyreAAAAA - 不允许

dfhjvAAAAAfyreAAA - 不允许

dfhjvAAAfyresdAAA - 允许

dfhjvAAAf3434yresdA - 允许

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

我的要求低于

  1. 字符串长度应小于25个字符
  2. 字符串仅为字母/数字的组合,不允许使用特殊字符。
  3. 已尝试解决方案

    1. ^(?= {1,25} $)(([A-ZA-Z0-9])\ 5?(?!\ 5))+ $
    2. (?ⅰ)(。)\ 1 \ 1
    3. 我将使用字符串来表示车辆发动机编号或底盘编号。

      我很好,如果JavaScript中有可能的解决方案。

      我们可以在.net中构建这种类型的正则表达式吗?

2 个答案:

答案 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}) - 字符串
  • 内的任何地方都没有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)