使用正则表达式模式的电话号码类别

时间:2012-11-07 08:32:08

标签: java regex phone-number

我想获得用户输入的电话号码。我有2个数字类别Golden和Normal。当用户输入某个电话号码模式时,系统会自动将其确定为Golden或Normal。我对编码某些模式有问题。其中一个Golden Pattern数字是这样的:AB001234其中AB的数字是12,23,34,45,56,67,78和89.这是我到目前为止所得到的。

    public static void main(String[] args) {

    Scanner userinput = new Scanner(System.in);


    System.out.println("Enter Telephone Number");
    String nophone = userinput.next();

    String Golden = "(\\d)(\\1)002345|(\\d*)12345$";
    //I want to add AB001234 pattern to the line above but I don't know how.


    if (nophone.matches(Golden)) {
        System.out.println("Golden");
    }


    else {
        System.out.println("Normal");
    }
    }

我不确定我是否真的必须使用正则表达式。 还有一个问题,你可以看到String Golden的第一部分没有$而第二部分有$。如果我放入或删除$符号,我不确定效果。

2 个答案:

答案 0 :(得分:3)

(\\d)(\\1)不检查1223之类的序列等等。而是检查两个连续的数字,例如11,{{1} },22,...

要检查顺序,您必须使用33显式执行此操作 - Pipe(|)

因此,(12|23|34|45|...)的模式应如下所示: -

Golden Number

^(?:12|23|34|45|56|67|78|89)001234$ - 表示(?:..)。它不会被捕获为模式中的编号组。

注意: - 如果non-capturing group的长度发生变化,则sequence不适合与之匹配。

对于第二个问题,Regex表示字符串的结尾。因此,最后带有$的模式将在字符串的末尾匹配。此外,$可以匹配字符串的开头。

例如: -

  • Caret (^)匹配字符串abc$,但不匹配"asdfabc"
  • "sdfabcf"匹配字符串^abc,但不匹配"abcfsdf"
  • "sdfabcf"仅匹配字符串^abc$,因为它是唯一以"abc"开头和结尾的字符串。

您可以浏览以下链接,详细了解"abc": -

答案 1 :(得分:1)

要得到这个:

  

AB001234其中AB的数字如12,23,34,45,56,67,78和89.这里   到目前为止我得到了什么

正则表达式看起来像:

^(12|23|34|45|56|67|78|89)001234$

$符号表示字符串的结尾。这意味着如果在最后一个字符后面有任何aditional字符,则该字符串将与Regex不匹配。

^符号表示字符串的开头。

有关详细信息,请查看Javadoc API上的Summary of regular-expression constructs