Как вы форматируете 10-значную строку в телефонный номер? - PullRequest
18 голосов
/ 19 января 2010

У меня есть записи в базе данных в виде 10-символьных строк, таких как 4085551234.

Я хочу отформатировать их в этот формат: (408) 555-1234.

Я думаюэто связано с регулярным выражением.Я новичок в программировании и полностью самоучка здесь, так что любой вид, связанный с выполнением обработки текста, также будет оценен.Спасибо!

Ответы [ 5 ]

91 голосов
/ 19 января 2010

Регулярное выражение определенно излишне для этого.Если вы хотите взять «номер телефона» и нормализовать его до 10 цифр, это было бы неплохо для регулярного выражения.Чтобы сделать то, что вы просите, просто сделайте что-то вроде:

echo '('.substr($data, 0, 3).') '.substr($data, 3, 3).'-'.substr($data,6);

Поскольку вы уже знаете, как разделить ваши данные, вы можете просто использовать substr или что-то подобное, чтобы получить нужные вам части.RegEx полезен для сопоставления строк, которые не всегда имеют строгий формат.(Как переменные числа пробелов, переменные вещи до или после него, дополнительные тире и т. Д.).Но в вашем случае ввод всегда строго отформатирован из 10 цифр, ничего больше, поэтому вам не нужны дополнительные издержки RegEx для его форматирования.

19 голосов
/ 19 января 2010

Посмотрите здесь: Формат телефонного номера

function format_phone($phone)
{
    $phone = preg_replace("/^\d/", "", $phone);

    if(strlen($phone) == 7)
        return preg_replace("/(\d{3})(\d{4})/", "$1-$2", $phone);
    elseif(strlen($phone) == 10)
        return preg_replace("/(\d{3})(\d{3})(\d{4})/", "($1) $2-$3", $phone);
    else
        return $phone;
}
6 голосов
/ 19 января 2010

Я бы наверное пошел с

$num = "4085551234";  // given                                                  
$formatted = "(".substr($num,0,3).") ".substr($num,3,3)."-".substr($num,6);

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

3 голосов
/ 19 января 2010

Обычно вы можете сделать что-то вроде:

\(\d\{3\}\)\(\d\{3\}\)\(\d\{4\}\)

Чтобы сопоставить 10 цифр в 3 выражениях подгруппы, а затем распечатать их, используя каждую подгруппу:

"(\1) \2-\3

Но на практикеданные в свободной форме обычно немного сложнее

2 голосов
/ 28 октября 2015

Я должен был ответить на этот вопрос для моего курса по информатике.Java:

Напишите программу, которая принимает 10-значный номер # и форматирует его как номер телефона.

Пример: 705726552
Вывод: (705)726-2552

import java.util.Scanner;
  public class  TelNumCorrection{

  public static void main(String[]args){

    Scanner scan = new Scanner(System.in);
    System.out.println("Please enter a 10 digit number");
    String num=scan.nextLine();

    String a=num.substring(0,3);
    String b=num.substring(3,6);
    String c=num.substring(6);
    System.out.println("("+a+ ")"+b+"-"+c);
  }
}
...