c# - 需要正则表达式帮助

标签 c# regex

我想知道这是否可以使用正则表达式。我想排除所有字母(大写和小写)和以下 14 个字符! “&‘ * + , : ; < = > @_

问题是等号。在我要验证的字符串(长度必须为 20 或 37 个字符)中,等号必须位于第 17 或第 20 个位置,因为它在这些位置用作分隔符。因此,它必须检查等号是否位于第 16 位或第 20 位以外的任何位置(但不能同时位于两者)。以下是一些示例:

通过:1234567890123456=12345678901234567890

通过:1234567890123456789=12345678901234567

不通过:123456=890123456=12345678901234567

不通过:1234567890123456=12=45678901234567890

我很难理解我必须在这两个位置允许等号的部分,并且不确定 Regex 是否可行。添加一个 if 语句需要大量的代码更改和回归测试,因为这个存储这个正则表达式的函数目前被许多不同的插件使用。

最佳答案

我去

^([^a-zA-Z!"&'*+,:;<=>@_]{16}=[^a-zA-Z!"&'*+,:;<=>@_]+|[^a-zA-Z!"&'*+,:;<=>@_]{19}=[^a-zA-Z!"&'*+,:;<=>@_]*)$

解释:

1) 从允许的字符开始:

^[^a-zA-Z!"&'*+,:;<=>@_]$

[^xxx] 表示除 xxx 以外的所有,其中 a-z 是小写字母 A-Z 大写字母,其他都是字符

2) 重复 16 次,然后是 =,然后是其他允许的字符(“allowed char”后跟 '+' 表示重复 1 到 n 次)

^[^a-zA-Z!"&'*+,:;<=>@_]{16}=[^a-zA-Z!"&'*+,:;<=>@_]+$

此时您将匹配您的第一个案例,此时 = 位于第 17 位。

3) 你的第二个案例将是

^[^a-zA-Z!"&'*+,:;<=>@_]{19}=[^a-zA-Z!"&'*+,:;<=>@_]*$

在最后一部分后跟 * 而不是 + 来处理只有 20 个字符长且以 = 结尾的字符串

4) 只需使用 (case1|case2) 来处理这两个问题

^([^a-zA-Z!"&'*+,:;<=>@_]{16}=[^a-zA-Z!"&'*+,:;<=>@_]+|[^a-zA-Z!"&'*+,:;<=>@_]{19}=[^a-zA-Z!"&'*+,:;<=>@_]*)$

使用 notepad++ 和您的示例测试正常


编辑以精确匹配 20 或 37 个字符

^([^a-zA-Z!"&'*+,:;<=>@_]{16}=[^a-zA-Z!"&'*+,:;<=>@_]{3}|[^a-zA-Z!"&'*+,:;<=>@_]{16}=[^a-zA-Z!"&'*+,:;<=>@_]{20}|[^a-zA-Z!"&'*+,:;<=>@_]{19}=|[^a-zA-Z!"&'*+,:;<=>@_]{19}=[^a-zA-Z!"&'*+,:;<=>@_]{17})$

带有解释的更具可读性的 View :

`
^(                              
                                // 20 chars with = at 17
    [^a-zA-Z!"&'*+,:;<=>@_]{16} // 16 allowed chars
    =                           // followed by =
    [^a-zA-Z!"&'*+,:;<=>@_]{3}  // folowed by 3 allowed chars
|                               
    [^a-zA-Z!"&'*+,:;<=>@_]{16} // 37 chars with = at 17   
    =                           
    [^a-zA-Z!"&'*+,:;<=>@_]{20}
|
    [^a-zA-Z!"&'*+,:;<=>@_]{19} // 20 chars with = at 20   
    =
|
    [^a-zA-Z!"&'*+,:;<=>@_]{19} // 37 chars with = at 20
    =
    [^a-zA-Z!"&'*+,:;<=>@_]{17}
)$

`

关于c# - 需要正则表达式帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36136016/

相关文章:

c# - 将 AsymmetricAlgorithm 私钥和公钥与 RSA C# 结合使用

c# - 在 callstack .net 上推拉值

php - preg_match 允许反斜杠的问题

regex - 在 R 中使用正则表达式替换数字前面的字符

python - 使用 Python 从 HTML 获取 div

c# - 如何同步共享的 IProgress<int>

c# - 跨类/控件调用 - 传递引用、使用事件或更改结构

c# - 在下拉列表中设置选定值

正则表达式,提取字符串末尾的单词和数字

javascript - 具有国际字符的名称使用什么正则表达式