JavaScript正则表达式用于验证地址

4
我正在尝试修改此脚本,以便使用正则表达式接受逗号、破折号和撇号来验证表单上的地址。请问这个脚本写得正确吗?
^[a-zA-Z0-9\s\,\''\-]*$

"它是否被正确地编写了?" - 你自己试过了吗? - casablanca
4
如果你在谈论街道地址,验证它们并不是一件简单的事情。地址可以出现在许多格式中,即使某个东西看起来像一个地址,也不意味着它是一个真正有效的地址(比如,“123 Main Street”看起来像一个地址,但也许#123被跳过了或该街道只有90号以下的地址)。 - Daniel Vandersluis
无论如何,你的表达式在语法上是“正确”的,不会崩溃。但它非常不具体,将匹配任何仅包含字母、数字、空格、逗号、单引号或破折号的字符串。 - Daniel Vandersluis
例如,在一些城市中有一条名为“38 1/2 街”的街道。 - Pointy
可能是PHP正则表达式美国地址的重复问题。 - Daniel Vandersluis
4个回答

18

它可以工作,但有一些多余的转义符。

你不需要转义逗号、单引号和连字符。只有当字符具有特殊含义且你想要字面使用它时才需要转义。在字符类中:

  • -是元字符,但不是当它出现在开头或结尾时。 在你的情况下,它出现在末尾,所以 它已经失去了它的特殊含义(制作范围)。
  • ]是标记字符类结尾的元字符。因此,如果想要让]成为字符类的一部分,则需要对其进行转义。

因此,你可以将你的正则表达式写为:

^[a-zA-Z0-9\s,'-]*$

5
在评论中,丹尼尔·范德斯卢伊斯提出了一个非常好的观点:仅凭正则表达式无法验证地址。美国邮政服务局有一个名为CASS(编码准确性支持系统)的部门专门负责验证地址数据。我在SmartyStreets工作,我们为人们提供经过CASS认证的服务。实际上,如果您真的对好的地址感兴趣,我可以亲自帮助您入门(例如使用Javascript非常容易,只需要一两分钟)。

这在2020年看起来怎么样了? - Brandon Minton
嘿,布兰登,马特说的话在2020年仍然适用。尽管马特已经不在SmartyStreets工作了,但我们仍然可以帮助您入门。 - Davin

4
上面提供的正则表达式在输入为“House No.-780”时会返回错误。用户可能会在地址中添加“.”,因此我们需要编写一个能够接受“.”的正则表达式。您可以使用以下正则表达式:
/^[a-zA-Z0-9\s,.'-]{3,}$/ . 

这个正则表达式接受至少三个字符,最大字符数没有限制。字符可以包括a-z、A-Z字母、空格、逗号(,)、点(.)、撇号(')和破折号(-)符号。


0
如果您只想接受这些字符中的任何一个(或空字符串),那么您可以修改当前的内容为:
/^[a-z0-9\s,'-]*$/i

这并不是一个街道地址验证器。我建议你从其他地方学习更多关于正则表达式的知识。http://www.regular-expressions.info/examples.html 是一个很好的起点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接