2014-01-21 18 views
5

我知道这里至少有十几个问题。我正在尝试使用Regex对街道地址输入进行简单的验证,因此我在输入条目中至少检查了两个空格。原因?在大多数情况下,我们的地址至少有3部分,街道号,街道名称,类型(车道,车道,大街,st等)简单的街道地址正则表达式

我想提醒用户,如果条目不符合,如果它有三个以上的空格,这意味着它在地址中有更多的名字,没关系,但是最低限度的不满足需要警报。我最近的努力是在下面,并且不起作用。

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(); 
      } 
+0

不知道我明白了,这是巨大的正则表达式只是为了检查两个空格吗? – adeneo

+2

我只会计算空格(修剪,比较长度与\替换的长度) - 并非所有地址都以数字开头。 –

+2

^^^'str.split(/ \ s +/g)。长度> 2' – adeneo

回答

4

一个简单的测试是所有你需要:/^\s*\S+(?:\s+\S+){2}/

0

为什么不呢?...

var address="123 Something Street"; 
if (address.split(" ").length>2) { 
    alert("valid"); 
} else { 
    alert("invalid"); 
} 
+0

这就是我正在使用哪个没有工作。使用adeneo的空间工作正则表达式 – dinotom

0

你已经有了一些可行的建议在这里。不过,我想向你提供一个正则表达式,我认为做你的要求为:

\d+\s+\w+\s+\w+ 

,或者如果它只是一个警告,你甚至可以添加“类型”测试你表示,如:

\d+\s+\w+\s+(?:st(?:\.|reet)?|ave(?:\.|nue)?|lane|dr(?:\.|ive)?) 

允许缩写版本有或没有句号。 (随意添加道路,法院等)

查看regex101

希望这有助于

问候

编辑:记得添加标志不区分大小写。 )

1

\w+(\s\w+){2,}

描述:

  • \w+ =>字母数字,一个或多个repititions
  • \s =>空白
  • (\s\w+) =>编号捕获组[\ s \ w +]
  • {2,} =>至少2个repititions
0

我不能让其他人出于某种原因工作,但是这一次验证了我曾经拿出所有的街道地址与...

var value = '12136 Test This Road'; 
var streetAddRegEx = RegExp('/\d{1,}(\s{1}\w{1,})(\s{1}?\w{1,})+)/g'); 
streetAddRegEx.test(value); 

基本上我做它,所以它是任何词语集更多然后一个出发的一组数字的...

0

改进版本的基础上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)/ 
+0

不是很简单,这就是问题的要求... –