Как вы форматируете 10-значную строку в телефонный номер?
У меня есть записи базы данных в виде строк длиной 10 символов, таких как 4085551234.
Я хочу отформатировать их в этот формат: (408) 555-1234.
Я думаю, что это связано с регулярным выражением. Я новичок в программировании и полностью самоучка здесь, так что любой ресурс, связанный с обработкой текста, также будет оценен по достоинству. Спасибо!
5 answers
Регулярное выражение определенно излишне для этого. Если вы хотите взять "номер телефона" и нормализовать его до 10 цифр, это было бы хорошим использованием для регулярного выражения. Чтобы сделать то, о чем вы просите, просто сделайте что-то вроде:
echo '('.substr($data, 0, 3).') '.substr($data, 3, 3).'-'.substr($data,6);
Поскольку вы уже знаете, как разделить свои данные, вы можете просто использовать substr или что-то подобное, чтобы захватить нужные вам части. Регулярное выражение полезно для сопоставления строк, которые не всегда имеют строгий формат. (Например, переменные числа пробелов, переменные вещи до или после него дополнительные тире и т.д.). Но в вашем случае ввод всегда строго отформатирован из 10 цифр, ничего больше, поэтому вам не нужны дополнительные накладные расходы регулярного выражения для его форматирования.
Посмотрите здесь: Формат номера телефона
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;
}
Я бы, наверное, пошел с
$num = "4085551234"; // given
$formatted = "(".substr($num,0,3).") ".substr($num,3,3)."-".substr($num,6);
Регулярное выражение здесь не совсем уместно.
Тривиально вы могли бы сделать что-то вроде:
\(\d\{3\}\)\(\d\{3\}\)\(\d\{4\}\)
Чтобы сопоставить 10 цифр в 3 выражениях подгрупп, а затем распечатать их с использованием каждой подгруппы:
"(\1) \2-\3
Но на практике данные в свободной форме обычно немного сложнее
Я должен был задать этот вопрос для моего продвинутого курса информатики. 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);
}
}