2013-05-09 2 views
4

я следующий регулярное выражение для следующих мобильных номеров:Регулярное выражение для определения номера мобильного телефона?

^(([+]|[0]{2})([\\d]{1,3})([\\s-]{0,1}))?([\\d]{10})$ 

действительных чисел:

+123-9854875847 
0
+123 9854875847 
9878757845 

выше выражения не будет проверять, если пользователь вводит 9 или 11-значный номер мобильного телефона, но если пользователь вводит 9 или 11-значный номер с +123 или +91 соответственно, то он получает подтверждение, потому что в этой части выражения ([\\d]{1,3}) последние две цифры являются необязательными.

так любым способом сделать эту часть ([\\s-]{0,1}))?([\\d]{10}) не получить комбайн с этой частью ([\\d]{1,3})?

извините, если вопрос не совсем ясен.

+2

Некоторое упрощение - '[\\ d]' = '\\ d',' {0,1} '='? ',' [+] '=' \\ + ',' [0 ] '=' 0'. – Dukeling

+0

Как программа узнает, что это? Вам нужно будет проверить список разрешенных префиксов для этого. – Keppil

+0

означает, что я должен получить префикс в разных текстовых полех, и нет никакого другого способа с regx? – user460293

ответ

3

Вопрос несколько неясен, но я предполагаю, что вы хотите разделить число и код страны.

Это довольно легко сделать, извлекая группы. group(i) - i -е дело в скобках.

Я также применил эти упрощения: [\\d] = \\d, {0,1} = ?, [+] = \\+, [0]{2} = 00.

Код:

String regex = "^((\\+|00)(\\d{1,3})[\\s-]?)?(\\d{10})$"; 
String str = "+123-9854875847"; 
Pattern p = Pattern.compile(regex); 
Matcher m = p.matcher(str); 
if (m.matches()) 
{ 
    System.out.println("Country = " + m.group(3)); 
    System.out.println("Data = " + m.group(4)); 
} 

Выходные:

Country = 123 
Data = 9854875847 

Альтернативные использованием несовпадающих групп (?:): (так что вы можете использовать group(1) и group(2))

String regex = "^(?:(?:\\+|00)(\\d{1,3})[\\s-]?)?(\\d{10})$"; 
String str = "+123-9854875847"; 
Pattern p = Pattern.compile(regex); 
Matcher m = p.matcher(str); 
if (m.matches()) 
{ 
    System.out.println("Country = " + m.group(1)); 
    System.out.println("Data = " + m.group(2)); 
} 

Reference.

Related test.

0

Лучший способ ввода ввода в две части кода страны и номер мобильного телефона. В этом случае вы можете легко проверить его (код страны и номер мобильного телефона) с помощью регулярного выражения.

1

Пока расширение всегда отделено от остальной части номера телефона, ваше регулярное выражение будет работать нормально. Если такого разделения нет, невозможно правильно проверить номер телефона.

Также имейте в виду, что как номера, так и номера телефонов могут варьироваться в зависимости от страны, поэтому не существует регулярного выражения, которое разрешит все случаи. Если вы можете создать список разрешенных расширений, вы можете работать с ним в регулярном выражении и получать лучшие совпадения, но для многих групп произвольной длины цифр вы получите много неправильных совпадений.

Я немного упростил ваше регулярное выражение, так что оу может видеть на практике предложения Дакелинга. Ваше регулярное выражение сверху, мое внизу.

^(([+]|[0]{2})([\\d]{1,3})([\\s-]{0,1}))?([\\d]{10})$ 
^( (\\+|00) \\d{1,3} [\\s-]?)?  \\d{10} $ 
0
try { 


      String mobile_number="india number +919979045000\n" + 
        "india number 9979045000\n" + 
        "china number +86 591 2123654\n" + 
        "Brazil number +55 79 2\n" + 
        "it is test all string get mobile number all country"+ 
        "Ezipt +20 10 1234567\n" + 
        "France +33 123456789\n" + 
        "Hong Kong +852 1234 5456\n" + 
        "Mexico +52 55 12345678"+ 
        "thanks"; 

      Pattern p = Pattern.compile("\\(?\\+[0-9]{1,3}\\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{5}(?-?[0-9]{3})? ?(\\w{1,10}\\s?\\d{1,6})?"); 
      List<String> numbers = new ArrayList<String>(); 
      //mobile_number= mobile_number.replaceAll("\\-", ""); 
      Matcher m = p.matcher("" + mobile_number); 
      while (m.find()) { 
       numbers.add(m.group()); 
      } 

      p = Pattern.compile("\\(?\\+[0-9]{1,3}\\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}(?-?[0-9]{3})? ?(\\w{1,10}\\s?\\d{1,6})?"); 
      m = p.matcher("" + mobile_number); 
      while (m.find()) { 
       numbers.add(m.group()); 
      } 

      p = Pattern.compile("((?:|\\+)([0-9]{5})(?: |\\-)(0\\d|\\([0-9]{5}\\)|[1-9]{0,5}))"); 
      m = p.matcher("" + mobile_number); 
      while (m.find()) { 
       numbers.add(m.group()); 
      } 

      p = Pattern.compile("[0-9]{10}|\\(?\\+[0-9]{1,3}\\)?-?[0-9]{3,5} ?-?[0-9]{4}?"); 
      m = p.matcher("" + mobile_number); 
      while (m.find()) { 
       numbers.add(m.group()); 
      } 

      String numberArray=numbers.toString(); 
      System.out.print(""+numberArray); 

      // final result 
      /* [+919979045000, +86 591 2123654, +33 123456789, +52 55 12345678, +919979045000, +86 591 2123654, +55 79 2, +20 10 1234567, +33 123456789, +852 1234 5456, +52 55 12345678, +919979045000, 9979045000] */ 


     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
Смежные вопросы