您的位置:首页 > 其它

正则表达式创建数字号码匹配器

2016-06-14 16:12 357 查看
构成一个正则表达式来识别下面格式的电话号码数字:(nnn)nnn-nnnn。

第一步:匹配上面格式的正则表达可以这样构成:(\d{3})\s\d{3}-\d{4};其中\d单字符类型用来匹配从0到9的任何数字,另外{3}重复符号,是个简便的记号,用来表示有3个连续的数字位,也等效于(\d\d\d)。\s也另外一个比较有用的单字符类型,用来匹配空格,比如Space键,tab键和换行符这些空白字符。

第二步:将上面表达式转换成java程序正则表达式还需要对一些字符转义步奏。对java的解释器来说,在反斜线字符()后的字符有特殊的含义。转义后的正则表达式是:
\\(\\d{3}\\)\\s\\d{3}-\\d{4}


因为括号在正则表达式里面是起着将一个正则表达式分组的功能,所以括号也需要转义

第三步;如果在电话号码的开头,即区位号和本地号码之间可能会有空格。我们也可匹配这些情况,则通过在正则表达式中加入
(\\s*)?
来实现,其中*元字符表示在模式可能有0或多个空格符,?符号表示也可能没有这些空白字符。区位号也可能有括号或者没括号,
(\\(\\d{3}\\)|\\d{3})
这个规则相比原来对区位号匹配增加了对没括号的匹配
\\d{3}
中间用|符号链接起来表示或的意思。所以适应性更好

第四步:本地号码的前三位和后四位之间可能没有连接符,只是有空格符或者什么符号都没有。为了匹配这三种情况,将原来的-符号改成
(-|\\s*)?
描述的是他们之间的间隔可能是用-连接符链接的,或者是空白字符分割,或者这些都没有。

第五步:形成最后的正则表达式是如下形式:对(nnn)nnn-nnnn,或者nnn nnn-nnnn这种形式的号码可以识别。

(\\(\\d{3}\\)|\\d{3})(\\s*)?\\d{3}(-|\\s*)?\\d{4}


测试代码

import java.util.regex.Matcher;
import java.util.regex.Pattern;
System.out.println(Pattern.matches("(\\(\\d{3}\\)|\\d{3})(\\s*)?\\d{4}(-|\\s*)?\\d{3}", "(020)5278 886")); // (nnn) nnnn-nnn形式号码
System.out.println(Pattern.matches("(\\(\\d{3}\\)|\\d{3})(\\s*)?\\d{3}(-|\\s*)?\\d{4}", "(020)527 8886")); // (nnn) nnnn-nnn形式号码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: