正则表达式-分支条件

阅读: 4931    发布时间: 2018-01-26 17:54:14

我们先来举个例子,假如座机号码只有这两种形式

  • 010-88889999 :以3位区号开始,中间是减号“-”,以8位数字结束

  • 0451-8888777 :以4位区号开始,中间是减号“-”,以7位数字结束


如果我们要匹配这种座机号码,怎么写正则表达式呢?

再不用分支的条件下,我们可能这么思考,区号是3-4位数字,中间减号,后面是7-8位数字,因此可以写成这样“^\d{3,4}-\d{7,8}$”

var patt=/^\d{3,4}-\d{7,8}$/
alert( patt.test("010-88889999"))   //返回true
alert( patt.test("0451-8888777"))   //返回true
alert( patt.test("010-8888999"))   //返回true,但实际不符合要求
alert( patt.test("0451-88887777"))  //返回true ,但实际不符合要求

这种匹配方式会把 3位区号开头,7位号码结束的及 4位区号开头,8位号码结束的也匹配上,因此不符合咱们的要求。


我们采用分支方式实现,“^\d{3}-\d{8}$|^\d{4}-\d{7}$”,中间以“|”隔开,等同于或运算,要么以3位区号开头,8位号码结束,要么以4位区号开头,7位号码结束

var patt=/^\d{3}-\d{8}$|^\d{4}-\d{7}$/
alert( patt.test("010-88889999"))    //返回true  
alert( patt.test("0451-8888777"))    //返回true  
alert( patt.test("010-8888999"))     //返回false  
alert( patt.test("0451-88887777"))   //返回false


-END-