街道地址的简单正则表达式
我知道至少有十几个问题。 我正在尝试使用Regex对街道地址的输入进行简单validation,我在输入条目中检查至少两个空格。 原因? 在大多数情况下,我们的地址至少有3个部分,街道号码,街道名称,类型(车道,车道,大道,街道等)
我想提醒用户,如果条目至少不匹配,如果它有三个以上的空格,这意味着它在地址中有更多的名称,这很好,但最低要求不需要警报。 我最近的努力在下面,并没有奏效。
var addregex = new RegExp("^\d{1,6}\040([AZ]{1}[az]{1,}\040[AZ]{1}[az]{1,})$|^\d{1,6}\040([AZ]{1}[az]{1,}\040[AZ]{1}[az]{1,}\040[AZ]{1}[az]{1,})$|^\d{1,6}\040([AZ]{1}[az]{1,}\040[AZ]{1}[az]{1,}\040[AZ]{1}[az]{1,}\040[AZ]{1}[az]{1,})$"); if (addregex.test($(this).val())) { alert('is valid'); address.addClass('isvalid'); address.css("border", "1px solid lightgray"); } else { address.css("border", "2px solid red"); alert("Are you sure this is a valid street address?"); address.focus(); }
您只需要一个简单的测试: /^\s*\S+(?:\s+\S+){2}/
\w+(\s\w+){2,}
描述:
-
\w+
=>字母数字,一个或多个重复 -
\s
=>空白 -
(\s\w+)
=>编号的捕获组[\ s \ w +] -
{2,}
=>至少2次重复
基于ClasG答案的改进版本。
/\d+(\s+\w+){1,}\s+(?:st(?:\.|reet)?|dr(?:\.|ive)?|pl(?:\.|ace)?|ave(?:\.|nue)?|rd|road|lane|drive|way|court|plaza|square|run|parkway|point|pike|square|driveway|trace|park|terrace|blvd)/
为什么不?…
var address="123 Something Street"; if (address.split(" ").length>2) { alert("valid"); } else { alert("invalid"); }
你在这里有一些可行的建议。 但是,我想为你提供一个正则表达式,我认为你所要求的是:
\d+\s+\w+\s+\w+
或者,如果它只是一个警告,您甚至可以添加您指示的“类型”测试,例如:
\d+\s+\w+\s+(?:st(?:\.|reet)?|ave(?:\.|nue)?|lane|dr(?:\.|ive)?)
允许有或没有句号的缩写版本。 (随意添加道路,法院等)
在regex101上查看。
希望这可以帮助,
问候
编辑:记得为不区分大小写添加标志。 ;)
我无法让其他人出于某种原因工作,但是这个人validation了我所提出的所有街道地址……
var value = '12136 Test This Road'; var streetAddRegEx = RegExp('/\d{1,}(\s{1}\w{1,})(\s{1}?\w{1,})+)/g'); streetAddRegEx.test(value);
基本上我是这样做的,所以它是任何一组单词,然后是一组数字…
^(?!\s*$)^((?!([p|P][-. ]?[o|O].?[- ]?|post office )[b|B]([ox|OX]))(?!(\`|\~|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\+|\=|\[|\{|\]|\}|\||\\|\'|\<|\,|\.|\>|\?|\"|\;|\:)).)*$