用于标记电话号码的字符串标记生成器

时间:2014-02-09 00:10:34

标签: java regex

您能否帮助我以下列格式为电话号码标记用户输入:xxx xxx-xxxx in first else if

正则表达式已经过验证,可以正常工作。我会把它包括在内。

按照我想要抓住的其余电话号码的相同程序 将前三个数字分成一个单独的变量,其余的数字连接起来。

这是代码

else  if (ValidatePhone.validateSpaceAfterAreaCode(input)) {
        StringTokenizer st = new StringTokenizer(input);
      String token = st.nextToken("\\s").toString();
      //  firstdigits =  new Long(st.nextToken("\\s")).toString();
        phoneNumber = new Long(st.nextToken("-")).toString();
        phoneNumber += new Long(st.nextToken("-")).toString();
        num = Long.parseLong(phoneNumber);
        JOptionPane.showMessageDialog(null, "first digits: " + token + "\nlast digits: " + num);
    }
          //WORKING for xxx.xxx.xxxx

    else  if (ValidatePhone.validateAllPeriods(input)) {
        StringTokenizer st = new StringTokenizer(input);
        firstdigits =  new Long(st.nextToken(".")).toString();
        phoneNumber = new Long(st.nextToken(".")).toString();
        phoneNumber += new Long(st.nextToken(".")).toString();
        num = Long.parseLong(phoneNumber);
        JOptionPane.showMessageDialog(null, "first digits: " + firstdigits + "\nlast digits: " + num);
    }

这是验证手机类中的功能

public static boolean validateSpaceAfterAreaCode(String acspace)
{
    return  acspace.matches("^[1-9]\\d{2}\\s\\d{3}-\\d{4}");
}

2 个答案:

答案 0 :(得分:1)

你正在使它变得比它需要的复杂得多。我猜猜允许的形式是

nnn nnn-nnnn
nnn-nnn-nnnn
nnn.nnn.nnnn

并且您不希望允许其他变体,例如nnn nnn.nnnnnnn.nnn-nnnn。试试这个

Pattern p1 = Pattern.compile("([2-9]\\d{2})([-.])(\\d{3})\\2(\\d{4})");
Pattern p2 = Pattern.compile("([2-9]\\d{2})(\\s)(\\d{3})-(\\d{4})");

Matcher m = p1.matcher(input);

if (!m.matches())
    m = p2.matcher(input)
if (m.matches()
{
    // results are in m.group(1), m.group(3) and m.group(4)
}
else
{
    // input didn't match
}

说明:

p1
  ([2-9]\\d{2})  - Areacode (first digit must be 2-9)
  ([-.])         - Delimiter, either a dot or hyphen
  (\\d{3})       - The 3-digit exchange
  \\2            - Back-reference to the first delimiter
  (\\d{4})       - The 4-digit number

反向引用使正则表达式匹配匹配的第一个分隔符。

模式p2很简单,除了我将捕获括号放在第一个分隔符周围,因此数字组的索引在两种情况下都是相同的,从而无需检查匹配的模式。

答案 1 :(得分:0)

我会把它分开:

String parts = input.split("\\D+");

使用任何非数字序列进行拆分,并创建一个大小为3的数组,然后您可以将其解析为整数等。