在输入标记的pattern属性中,我使用以下正则表达式来验证美国联邦税号ID字段。
pattern="^([07][1-7]|1[0-6]|2[0-7]|[35][0-9]|[468][0-8]|9[0-589])-?\d{7}$"
但是这个正则表达式允许11-1111111,22-2222222(所有相同的数字)类型的条目。不应允许此类条目。请帮助正确的正则表达式。
答案 0 :(得分:1)
^(?![01][789]|2[89]|[46]9|7[089]|89|9[67])\d\d-\d{7}$
但是这并没有像11-1111111
或22-2222222
那样捕获EIN:你可能想要抓住它们,因为它类似于人们充满填充表单字段的模式类型。您可以捕获这样的重复模式:
^(\d)\1-\1{7}$
但是在这里:你不能确定它们是无效的。 11-1111111
,22-2222222
,33-3333333
等的每一个都根据定义有效(因为11,22,33等)都是有效的compus代码前缀。
所以你最终会拒绝某人的EIN是合法的。
拥有EIN前缀白名单的缺点是您的软件现在对数字列表具有外部依赖性,并且您的软件包管理器不会立即通知您立法更改的时间。由于很难预测软件的生命周期,因此该程序最终可能会拒绝将来有效的EIN。你需要在这里权衡一些成本;制作一个非常短的正则表达式可能不是你能在这里实现的最好的东西。
答案 1 :(得分:0)
我写了一个满足要求的正则表达式。
pattern="^((?!11-1111111)(?!22-2222222)(?!33-3333333)(?!44-4444444)(?!55-5555555)(?!66-6666666)(?!77-7777777)(?!88-8888888)(?!99-9999999)(?!12-3456789)(?!00-[0-9]{7})([0-9]{2}-[0-9]{7}))*$"
虽然效率不高。任何人都有更高效的正则表达式?