【问题标题】:.net Regex for more than 5 consecutive alphabet letters.net Regex 用于超过 5 个连续的字母
【发布时间】:2017-07-09 07:17:10
【问题描述】:

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

dfhjvudyfyreaaaaa - 不允许

dfhjvudyfyreAAAAA - 不允许

dfhjvAAAAfyreAAA - 不允许

dfhjvAAAfyresdAAA - 允许

dfhjvAAAf3434yresdA - 允许

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

我的要求如下

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

已尝试解决方案

  1. ^(?=.{1,25}$)(([a-zA-Z0-9])\5?(?!\5))+$
  2. (?i)(.)\1\1

我将使用字符串来表示车辆发动机号或底盘号。

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

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

【问题讨论】:

  • 创建多个正则表达式:它们会更容易阅读和维护。

标签: javascript .net regex


【解决方案1】:

使用不区分大小写的标志,您可以使用否定前瞻来测试是否没有五个连续字符:

^(?!.*(.)\1{4})[A-Z0-9]{1,25}$ 

【讨论】:

    【解决方案2】:

    这是一个可能的解决方案:

    ^(?![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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 2021-06-26
      • 1970-01-01
      相关资源
      最近更新 更多