2013-09-01 2 views
2

Я пытаюсь проверить телефонные номера, которые следуют следующему шаблонуRegular Expression Номер телефон Validation

01\d{9} 
2\d{7} 

Но пользователь может ввести более одного номер разделенного пробела или один в поле ввода Так что я придумал регулярное выражение

/(?:(?:01\d{9}$)|(?:2\d{7}$)){1,} 
A Test Sample 
"01226113130 26322612 24586154 01004598654" 

Мое выражение Не соответствует этому образцу, любая помощь?

Решение Для других, если они не в проблеме, Вы можете попробовать Джерри решение или это один

(?:(?:(?:01\d{9}(?:[\- \,])*)|(?:2\d{7}[\- \,]*))){1,} 
+0

мой плохой, я исправлю это немедленно –

+0

Предоставлять тестовые случаи .. то, что вы ожидаете, чтобы пройти и потерпеть неудачу. – Layke

+0

@ Layke Я предоставил один –

ответ

2

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

^(?:(?:01\d{9}|2\d{7})){1,}(?:01\d{9}|2\d{7})$ 

Ваше текущее регулярное выражение имеет (?:01\d{9}$)|(?:2\d{7}$) где $ заставил его «преждевременно закончить» матч, поэтому удаление этого было первым делом. Затем (?:01\d{9})|(?:2\d{7}) может быть переписан как (?:01\d{9}|2\d{7}). Я добавил ^ для начала строки.

Впоследствии это регулярное выражение будет проверять только строки, заканчивающиеся пробелом, поэтому добавьте еще один (?:01\d{9}|2\d{7}) в конце и, наконец, завершите с $.

regex101 demo.

Ой, а также, возможно, было бы лучше, чтобы превратить {1,} в * как это:

^(?:(?:01\d{9}|2\d{7}))*(?:01\d{9}|2\d{7})$ 
+0

Да Это сработало, и я также отредактировал Mine and It Worked BTW Я нашел отличный инструмент [link] (http://www.debuggex.com/) –

+1

@ShadyAtef Я рад! И yup, debuggex хорош с картинками, хотя я предпочитаю regex101 далеко за расширенные функции регулярного выражения, такие как '\ G',' \ K' или lookbehinds! – Jerry

+0

Если его цель - совпадение 1+, эта звезда должна быть '' '' '' ''. Вместо того, чтобы повторять выражение. – DivinusVox