2014-11-10 2 views
1

Я делаю регулярное выражение, которое будет читать номера телефонов из формы PHP. У меня есть выражение, которое больше всего завершено. Он должен прочитать номер телефона в любом из следующих форматов:Регулярное выражение Номер телефона PHP

623-456-7890 

456-7890 

6234567890 

4567890 

623.456.7890 

456.7890 

623 456 7890 

456 7890 

Выражение я сделал на данный момент заключается в следующем:

(([0-9]{3}){0,1})((\W){0,1})([0-9]{3})((\W){0,1})([0-9]{4}) 

В основном это работает, только номер телефона, который он не читает, является третьим в вышеуказанном списке (6234567890). Что я должен добавить или изменить, чтобы прочитать этот номер телефона?

+2

Удалите все разряды, проверьте количество цифр и переформатируйте их в любом случае. – Cheery

+0

Я бы хотел, но мне действительно нужно регулярное выражение, чтобы включить все эти символы для этой формы. Мне бы хотелось раздеть их, но я не могу. – cheesebal35

+1

Ознакомьтесь с https://code.google.com/p/libphonenumber/. Есть даже порт PHP ~ https://github.com/giggsey/libphonenumber-for-php – Phil

ответ

2

Это гораздо лучше:

([0-9]{3})?\W*([0-9]{3})\W*([0-9]{4}) 
+1

'([0-9] {3}) *' is слишком жадный ... должен быть '([0-9] {3})?' –

1

/(?:[\(]?\d{3}[\)\.\- ]?)?\d{3}[\.\- ]?\d{4}/

Здесь на практике: http://regex101.com/r/pL3dB0/3

+0

Это также соответствует '-------' –

+0

ОК, один момент ... –

+0

Удивительный! Это отлично работает! – cheesebal35

1

Real телефоны гораздо сложнее, чем это из-за обмена и так далее. Это будет соответствовать номерам, периодам и дефисам, не все они требуются, но также не проверяют действительные номера телефонов.

([0-9]{3})?[ .-]?([0-9]{3})[ .-]?([0-9]{4}) 
+0

Содержит 3 шаблона захвата (не в вопросе) –

Смежные вопросы