asp.net - 美国 Zip+4 验证
问题描述
我有一个要求提供美国 Zip+4,+4 是可选的,+4 不能是 0000。我在 .NET 中执行此操作,因此我使用带有 RegEx 集的 RegularExpressionValidator。在我的第一个验证器中,我正在检查邮政编码是 xxxxx-xxxx 还是 xxxxx 格式,即 5+4 或 5。在我的第二个验证器中,我检查最后 4 个是否未设置为 0000。这意味着 1234-0000 无效. 这些是我的正则表达式,我想确保它们是有效的。似乎他们测试正常,但是当使用 regex101 应用程序在线交叉检查它们时,我得到的行为与 .NET 不同。
xxxxx-xxxx or xxxxx = ^[0-9]{5}(?:-[0-9]{4})?$
xxxxx-0000 = \d{5}(?!-0000).*
最后一个我完全不明白它是如何工作的,但它似乎工作。有人帮我解释一下?!和 .* 他们似乎都需要这个功能。我的理解是 .* 表示所有字符和 ?! 表示负前瞻???
解决方案
实际上,我在这里建议的正则表达式模式实际上是您上面提供的两者的组合:
^[0-9]{5}(?!-0000$)(?:-[0-9]{4})?$
演示
下面是对模式的解释:
^ from the start of the ZIP code
[0-9]{5} match a 5 digit ZIP code
(?!-0000$) then assert that the PO box is NOT -0000
(?:-[0-9]{4})? match an optional -xxxx PO box (which can't be 0000)
$ end of the ZIP code
值得注意的是,该(?!-0000$)
术语被称为负前瞻,因为它在输入中前瞻并断言后面的不是-0000
。但是,使用前瞻不会推进模式,因此在完成否定断言后,模式会继续尝试匹配-xxxx
后面的可选邮政信箱。
推荐阅读
- pentaho - penatho中excel的自定义标题
- actions-on-google - Google Actions (Google Assistant) 响应中的电话号码
- python - Tensorflow:我的 Iris 分类器(没有估计器)不工作
- security - 无法在启用 SSL 的情况下向 Kafka 生成消息
- python - 用代码中的单词替换值,然后将其粘贴到文件中,python?
- c++ - cmake如何在C ++中将编译器标志附加到末尾
- html - 即使更改屏幕尺寸,导航选项卡仍保持在页面中心
- python - 在 Django 中上传和下载 excel 文件
- python - Calling foreign key object several times in Django without several DB requests
- dns - iRedmail:电子邮件进入 Hotmail 的垃圾邮件