Javascript 街道地址的简单正则表达式
我知道在这方面至少有十几个问题。我正在尝试使用Regex对街道地址的输入进行简单验证,从而检查输入条目中是否至少有两个空格。原因是什么?在大多数情况下,美国地址至少有3部分,街道编号、街道名称、类型(车道、车道、大道、街道等) 如果条目不匹配,我想提醒用户至少,如果条目有三个以上的空格,这意味着地址中有更多的名称,这很好,但如果不满足最小值,则需要发出警告。我的最新成果如下,但不起作用Javascript 街道地址的简单正则表达式,javascript,jquery,regex,Javascript,Jquery,Regex,我知道在这方面至少有十几个问题。我正在尝试使用Regex对街道地址的输入进行简单验证,从而检查输入条目中是否至少有两个空格。原因是什么?在大多数情况下,美国地址至少有3部分,街道编号、街道名称、类型(车道、车道、大道、街道等) 如果条目不匹配,我想提醒用户至少,如果条目有三个以上的空格,这意味着地址中有更多的名称,这很好,但如果不满足最小值,则需要发出警告。我的最新成果如下,但不起作用 var addregex = new RegExp("^\d{1,6}\040([A-Z]{1}[a-z]
var addregex = new RegExp("^\d{1,6}\040([A-Z]{1}[a-z]{1,}\040[A-Z]{1}[a-z]{1,})$|^\d{1,6}\040([A-Z]{1}[a-z]{1,}\040[A-Z]{1}[a-z]{1,}\040[A-Z]{1}[a-z]{1,})$|^\d{1,6}\040([A-Z]{1}[a-z]{1,}\040[A-Z]{1}[a-z]{1,}\040[A-Z]{1}[a-z]{1,}\040[A-Z]{1}[a-z]{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();
}
为什么不呢
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)?)
允许使用带或不带句号的缩写版本。(随意增加道路、庭院等)
请点击查看
希望这有帮助
问候
编辑:记住为不区分大小写添加标志。;) 您只需要一个简单的测试:
/^\s*\s+(?:\s+\s+{2}/
\w+(\s\w+{2,}
说明:
=>字母数字,一个或多个重复\w+
=>空白\s
=>编号的捕获组[\s\w+](\s\w+)
=>至少两次重复{2,}
var value = '12136 Test This Road';
var streetAddRegEx = RegExp('/\d{1,}(\s{1}\w{1,})(\s{1}?\w{1,})+)/g');
streetAddRegEx.test(value);
基本上是我做的,所以它是任何一组单词,而不是一组数字…改进版,基于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)/
以下代码::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::[p;p;p;p;p;p;p)p[p[p[p[p[p[124;p)p]p[p[[[[[[p]p]p]p]p]p]p[[[[[[[[[[[[p]p]p]p]p]p]p][[[[[[[[[[[[[p]p]p]p]p]的[[[[[[[[[[[[[[[3]p]p]p]p]的[[[[[[[[[[|\?|\“|\ |\:))*$
我不确定我是否明白,那么大的正则表达式只是为了检查两个空格吗?我只会计算空格(修剪,比较长度与长度,并替换\s)-并非所有地址都以数字开头。^^^
str.split(/\s+//g).length>2
US street地址只能包含number+street。地址不规则,不应使用正则表达式验证地址,除非您对遗漏大量案例感到满意(有时为20%到40%)这里有一篇关于地址和正则表达式的有用文章:这正是我所使用的但不起作用的内容。在RegExp()at:2:22使用adeneo的正则表达式进行空间工作没有语法错误:无效正则表达式://d{1,}(s{1}w{1,})(s{1}?w{1,}+)/g/:Unmatched'),这不适用于诸如“PO Box 123”这样的PO框这遗漏了几个地址样式,例如“123 West Second Ave”
^(?!\s*$)^((?!([p|P][-. ]?[o|O].?[- ]?|post office )[b|B]([ox|OX]))(?!(\`|\~|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\+|\=|\[|\{|\]|\}|\||\\|\'|\<|\,|\.|\>|\?|\"|\;|\:)).)*$