Регулярный номер телефона для нескольких шаблонов в Java - PullRequest
1 голос
/ 30 июля 2010

Мне нужна помощь в написании регулярного выражения для шаблона номера телефона, который допускает следующие форматы для номера телефона


1)###-###-####
or 
2)#-###-###-####
or
3)###-####
or
4)##########
or
5)#######

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

Я использую Java

Ответы [ 8 ]

4 голосов
/ 30 июля 2010

Вы можете использовать |(или) оператор и несколько шаблонов.

Например: (\d{7})|(\d{10)| ...

2 голосов
/ 12 февраля 2013

Это регулярное выражение будет соответствовать всем местным номерам и международным номерам.

String reg= "([\\+(]?(\\d){2,}[)]?[- \\.]?(\\d){2,}[- \\.]?(\\d){2,}[- \\.]?(\\d){2,}[- \\.]?(\\d){2,})|([\\+(]?(\\d){2,}[)]?[- \\.]?(\\d){2,}[- \\.]?(\\d){2,}[- \\.]?(\\d){2,})|([\\+(]?(\\d){2,}[)]?[- \\.]?(\\d){2,}[- \\.]?(\\d){2,})";

1 ### - ### - ####
2 # - ### - ### - ####
3 ##########
4 + ### ## - ### - ####
5 ###. ###. ####
6 ### ### ####

7 (###) ### ####

Все вышеперечисленные форматы будут работать.

2 голосов
/ 06 июня 2012
public int Phone(String num)
{
    try
    {
    String expression = "^(?=.{7,32}$)(\\(?\\+?[0-9]*\\)?)?[0-9_\\- \\(\\)]*((\\s?x\\s?|ext\\s?|extension\\s?)\\d{1,5}){0,1}$";  
    CharSequence inputStr = num;  
    Pattern pattern = Pattern.compile(expression);  
    Matcher matcher = pattern.matcher(inputStr);
    int x=0,y=0;
    char[] value=num.toCharArray();
    for(int i=0;i<value.length;i++)
    {
        if(value[i]=='(')
            x++;
        if(value[i]==')'&&((value[i+1]>=48&&value[i+1]<=57)||value[i+1]=='-'))
            y++;
    }
   if(matcher.matches()&&x==y)
      return 1; //valid number
   else
      return 0; //invalid number
    }
    catch(Exception ex){return 0;}
 }



}
2 голосов
/ 30 июля 2010

попробуй ^(\+\d)*\s*(\(\d{3}\)\s*)*\d{3}(-{0,1}|\s{0,1})\d{2}(-{0,1}|\s{0,1})\d{2}$

Здесь - это онлайн-оценщик регулярных выражений, вы можете проверить свои шаблоны на соответствие этому регулярному выражению и / или любому другому.

1 голос
/ 06 июля 2012

Не требуется, чтобы пользователь вводил номер в каком-либо определенном формате.

Позвольте ему вводить его по своему усмотрению.

Удалите любой код страны и сохраните его для последующего использования, аналогичнолюбые данные добавочного номера, если таковые имеются.

Удалите все пробелы и знаки пунктуации.

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

Отображение номера пользователю в стандартизированном формате (либо в национальном формате, либо в международном формате с кодом страны) с добавлением пробелов ипунктуация для удобства чтения.

1 голос
/ 19 января 2012

Это позволяет использовать расширения, международные форматы Великобритании и проверять минимальную длину 7 символов

^(?=.{7,32}$)(\(?\+?[0-9]*\)?)?[0-9_\- \(\)]*((\s?x\s?|ext\s?|extension\s?)\d{1,5}){0,1}$
1 голос
/ 30 июля 2010

Попробуйте это

^ \ d? -? (\ D {3})? -? \ D {3} -? \ D {4} $

1 голос
/ 30 июля 2010

Попробуйте это регулярное выражение:

@"^(((\d-)?\d{3}-)?(\d{3}-\d{4})|\d{7}|\d{10})$"

Это охватывает пять сценариев, которые вы описали;В качестве альтернативы, если вы также можете принять следующие сценарии:

6)###-#######
or 
7)#-###-#######
or 
8)#-##########

, тогда этот более короткий вариант также будет работать:

@"^(((\d-?)?\d{3}-?)?(\d{3}-?\d{4}))$"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...