带有一些限制的员工ID的正则表达式
本文关键字:ID 正则表达式 | 更新日期: 2023-09-27 17:50:55
问题声明:
我试图在下面提到的正则表达式中构建一个正则表达式,它接受两个连续的特殊字符,如:/_
或''
或./
或--
或'-
,或任何其他特殊字符的组合(./'_-
(:
^[a-zA-Z0-9'd]{1}[a-zA-Z0-9'd._/'-]{0,49}$
我在这里做错了什么?
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)
语法是一个零宽度的正向后看。