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

时间:2013-01-08 08:31:58

标签: c# .net regex

问题陈述:

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

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

我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

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

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

部分(?:[a-zA-Z\d]|(?<![._/\\\-])[._/\\\-])匹配字母数字字符,或特殊字符._/\-它已经不是一个特殊的角色了。我还使该组无法捕获(?:pattern),因为似乎正则表达式仅用于验证。

我利用零宽度负面后瞻断言(?<!pattern)断言前面的字符不是特殊字符之一。

答案 1 :(得分:1)

这个正则表达式似乎符合你的要求

^[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

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

(?<=expression)语法为zero-width positive look-behind