我们先来举个例子,假如座机号码只有这两种形式
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