2015-03-16 2 views
0

У меня есть это регулярное выражениеОАЭ Телефон REGEX

^(?:[\+971|00971|0]*)((?:2|3|4|5|6|7|9|50|51|52|55|56)[0-9]{7,}) 

, который будет принимать эти телефонные номера

009715060403341 
05060403341 
+9715060403341 

Однако, я не хочу, чтобы принять эти цифры

009712060403341 
02060403341 
+9712060403341 

Так второй не захватывающая группа не должна начинаться с 2. Это условие.

Может ли кто-нибудь помочь в решении проблемы?

ответ

1

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

^(?:\+971|00971|0)(?!2)((?:2|3|4|5|6|7|9|50|51|52|55|56)[0-9]{7,})$ 

DEMO

ИЛИ

Просто удалите 2 из второго не-захвата группы.

^(?:\+971|00971|0)((?:3|4|5|6|7|9|50|51|52|55|56)[0-9]{7,})$ 

DEMO

+0

Спасибо @Avinash за огромную помощь - могли бы вы дайте мне знать, как я должен поставить или условие для отрицательного предпросмотра? т. е. если я не хочу запускать вторую не-захватывающую группу также на 4? –

+0

'^ (?: \ + 971 | 00971 | 0) (?! 2 | 4) ((?: 2 | 3 | 4 | 5 | 6 | 7 | 9 | 50 | 51 | 52 | 55 | 56) [ 0-9] {7,}) $ ', принимайте, если этот ответ помогает. –