我正在尝试查看验证美国地址的好方法,我知道可能没有正确的方法,但我将采用基本方法:#, Street name, City, State和邮政编码。
任何想法将不胜感激。谢谢
我正在尝试查看验证美国地址的好方法,我知道可能没有正确的方法,但我将采用基本方法:#, Street name, City, State和邮政编码。
任何想法将不胜感激。谢谢
不要尝试。有人可能有一个邮政信箱,或者一个公寓号码等,他们会对你很生气。即使是“正常”的街道名称也可以有数字,例如纽约市的 125th Street(和许多其他街道)。即使是郊区也可以有一些编号的街道。
城市名称可以有空格。
要求用户在单独的字段(街道名称、城市、州和邮政编码)中输入部分地址,并使用适用于此类字段的任何验证。这是一般做法。
或者,如果您想要匹配由三个逗号分隔的四个字符串的最简单的正则表达式,请尝试以下操作:
/^(.+),([^,]+),([^,]+),([^,]+)$/
如果匹配,您可以使用额外的模式匹配来检查地址的组成部分。无法检查街道地址的有效性,但您可以通过文本输入邮政编码和州代码。
地址的变化太多,无法使用正则表达式来做到这一点。您最好找到可以验证地址的 Web 服务。 USPS 有一个- 您必须申请许可才能使用它。
我同意萨尔曼的观点:让用户在不同的字段中输入数据(一个用于 zip,一个用于州,一个用于城市,一个用于 #/street 名称。为每个字段使用不同的正则表达式。对于街道 #/name我想出的最好的表达是
/^[0-9]{1,7} [a-zA-z0-9]{2,35}\a*/
在新西兰,您可以从新西兰邮政获得官方邮寄地址列表的许可 - 为您提供使用新西兰每个有效邮寄地址填充表格所需的数据。
根据这个列表进行验证比尝试提出正则表达式要容易得多 - 而且准确性也高得多,因为您最终会遇到三种情况:
使用 RegEx 获得的最佳效果是
对于许多企业来说,需要知道邮政地址是很常见的情况,所以我相信在大多数地区都可以许可列表。
唯一的粘性位将是定价。
这不是万无一失的解决方案,但假设地址以街道号的数字开头,以可以是 5 或 9 个数字的邮政编码结尾。
([0-9]{1,} [\s\S]*?[0-9]{5}(?:-[0-9]{4})?)
就像我说的,它不是万无一失的,但我过去使用它时取得了微不足道的成功。