带有一些限制的员工ID的正则表达式

本文关键字:ID 正则表达式 | 更新日期: 2023-09-27 17:50:55

问题声明:

我试图在下面提到的正则表达式中构建一个正则表达式,它接受两个连续的特殊字符,如:/_''./--'-,或任何其他特殊字符的组合(./'_-(:

^[a-zA-Z0-9'd]{1}[a-zA-Z0-9'd._/'-]{0,49}$

我在这里做错了什么?

带有一些限制的员工ID的正则表达式

mlorbetske的正则表达式可以重写一点,以删除条件正则表达式的使用。我还从正则表达式中删除了冗余的0-9,因为它已经被'd覆盖了。

^[a-zA-Z'd](?:[a-zA-Z'd]|(?<![._/'''-])[._/'''-]){0,49}$

部分(?:[a-zA-Z'd]|(?<![._/'''-])[._/'''-])匹配字母数字字符,或特殊字符._/'-,如果其前面的字符已经不是特殊字符。我还使该组不捕获(?:pattern),因为regex似乎只用于验证。

我使用了断言(?<!pattern)后面的零宽度否定外观来断言前面的字符不是特殊字符之一。

这个正则表达式似乎与您对的要求相匹配

^[a-zA-Z0-9'd](?(?<=['._/''-])[a-zA-Z0-9'd]|[a-zA-Z0-9'd'._/'''-]){0,49}$

示例

Regex.IsMatch("a-12--3", Pattern);    //false
Regex.IsMatch("a-12-3", Pattern);     //true

我使用了条件(?true|false)语法来指示,如果前一个字符(在进入中间组之前(是标点符号之一,则只有非标点符号可以跟在它后面,否则任何指定的字符都是允许的。

(?<=expression)语法是一个零宽度的正向后看。