求正则表达式:禁止连续递增数字/字母序列(WebForms应用)
解决方案:禁止连续递增数字/字母序列的正则表达式
可以实现你需要的规则,以下是针对旧版WebForms(基于.NET正则引擎)的具体方案:
1. 匹配禁止序列的正则片段
4位连续递增数字(如1234、2345)
精准匹配每一位比前一位大1的4位数字:
(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){3}\d
原理:通过(?=)正向预查,确保每个数字后面紧跟比它大1的数字,连续3次预查后,最后一位数字组成完整的4位递增序列。
连续递增字母序列(如abc、BCD,支持大小写)
匹配3位连续递增的字母(更长的递增序列如abcd会包含abc片段,因此也会被匹配拦截):
(?i)(?:a(?=b)|b(?=c)|c(?=d)|d(?=e)|e(?=f)|f(?=g)|g(?=h)|h(?=i)|i(?=j)|j(?=k)|k(?=l)|l(?=m)|m(?=n)|n(?=o)|o(?=p)|p(?=q)|q(?=r)|r(?=s)|s(?=t)|t(?=u)|u(?=v)|v(?=w)|w(?=x)|x(?=y)|y(?=z)){2}[a-z]
(?i)开启不区分大小写模式,确保同时匹配大小写递增序列。原理与数字部分一致,连续2次预查“字母后面紧跟大1的字母”,再加上最后一位组成3位递增序列。
2. 完整验证正则
因为需要禁止上述序列,使用否定正向预查确保输入中不存在任何禁止片段,完整正则如下:
^(?!.*(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){3}\d|(?i)(?:a(?=b)|b(?=c)|c(?=d)|d(?=e)|e(?=f)|f(?=g)|g(?=h)|h(?=i)|i(?=j)|j(?=k)|k(?=l)|l(?=m)|m(?=n)|n(?=o)|o(?=p)|p(?=q)|q(?=r)|r(?=s)|s(?=t)|t(?=u)|u(?=v)|v(?=w)|w(?=x)|x(?=y)|y(?=z)){2}[a-z])).*$
^和$锁定整个输入字符串,避免仅检查部分内容;(?!.*(...))否定预查:只要输入中包含括号内的任意禁止序列,验证直接失败;|分隔数字和字母的禁止规则,覆盖两种违规场景。
3. WebForms控件使用示例
将正则填入RegularExpressionValidator的ValidationExpression属性即可:
<asp:TextBox ID="txtUserInput" runat="server"></asp:TextBox> <asp:RegularExpressionValidator ID="revInputCheck" runat="server" ControlToValidate="txtUserInput" ValidationExpression="^(?!.*(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){3}\d|(?i)(?:a(?=b)|b(?=c)|c(?=d)|d(?=e)|e(?=f)|f(?=g)|g(?=h)|h(?=i)|i(?=j)|j(?=k)|k(?=l)|l(?=m)|m(?=n)|n(?=o)|o(?=p)|p(?=q)|q(?=r)|r(?=s)|s(?=t)|t(?=u)|u(?=v)|v(?=w)|w(?=x)|x(?=y)|y(?=z)){2}[a-z])).*$" ErrorMessage="输入包含禁止的连续递增序列,请修改" Display="Dynamic"> </asp:RegularExpressionValidator>
4. 测试验证
- 允许输入:
123、455、1111、ABB、BBC、abc123 - 禁止输入:
1234、2345、abc、BCD、xyz1234、aBcDef
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

