街道地址的简单正则表达式

我知道至少有十几个问题。 我正在尝试使用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]))(?!(\`|\~|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\+|\=|\[|\{|\]|\}|\||\\|\'|\<|\,|\.|\>|\?|\"|\;|\:)).)*$