2016-06-29 3 views
-1

Мы сталкиваемся на проверки, для которых мы имеем следующие правила,Регулярное выражение для номера телефона с некоторыми exlussion

Первый символ всегда должен быть «0» или «+46» или «0046»

Должен иметь длину между 8 - 20 (в том числе +, если есть)

и блокировать следующий номер,

(0900x, + 46900x, 0046900x).

(0939x, + 46939x, 0046939x).

(0944x, + 46944x, 0046944x).

(099x, + 4699x, 00469x).

Можете ли вы помочь мне создать регулярное выражение, я попытался создать и протестировать его на https://regex101.com/, но мне очень сложно его создать.

ответ

0

Я думаю, самый простой способ будет

^(?:0|\+46|0046)(?:900|939|944|99) 

Он начинается с проверки кода страны или предшествующего 0 и затем 4 комбинации кода зоны.

Check it out here at regex101.

Редактировать

Если вы хотите номер не ваших правил, вы можете попробовать то же самое с отрицательным заглядывая вперёд:

^(?!(?:0|\+46|0046)(?:900|939|944|99)).* 

See this one here.

или без отрицательного заглядывая вперёд:

^(?:[^0+]|0[^09]|\+[^4]|\+4[^6]|(?:\+46[^9])|(?:0046[^9])).*$ 

and this one here.

Edit 2

ОК, мы снова здесь;)

Это оказалось быть жестким. Но здесь мы идем:

^(?=.{8,20}$)(?>\+46|0046|0(?!0))(?!900|939|944|99)\+?\d* 
  • Добавить положительный смотреть вперед в начале утверждать, длина правильно
  • использовать атомную группу в соответствии с кодом страны - не позволяя другой двойной ноль 00
  • Negativ look-ahead, чтобы запретить платные номера.

Также изменено так, что оно позволяет только цифры (и необязательно + в начале).

See this one here.

+0

На самом деле нужно одно выражение, чтобы контент начинался с «0» или «+46» или «0046», и блок после этого имел 900, 939, 944, 99. поэтому выражение не должно совпадать в случае 004690, 00469391234, 00469441234, 0046991234 и аналогично в случае номера начинаться с 0 или +46. –

+0

Итак, вы хотите проверить негативы? Если ваш аромат регулярного выражения поддерживает негативный прогноз, попробуйте '^ (?! (?: 0 | \ +46 | 0046) (?: 900 | 939 | 944 | 99)). *'. [См. Здесь] (https://regex101.com/r/qC6gK2/3). – ClasG

+0

, который выглядит в каком-то сценарии, нам нужно, чтобы длина была 8 -20 символов и начиналась с 0 или +46 или 0046, я пытался сделать это, используя^(?! (?: 0 | \ +46 | 0046) (?: 900 | 939 | 944 | 99)) [+ | \ d] {8,20}, но что прошло 123456789, можете ли вы сказать, где я здесь неправ? –

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