регулярное выражение && логическое условие (номера телефонов в Швеции) - PullRequest
0 голосов
/ 25 марта 2010

8, 10, 12, 981 (несколько кодов городов в Швеции). Общий номер телефона может быть 10 или 11 (только цифры) Если 8 + 9 или 10 цифр если 981 + 7 или 8 цифр Можно ли это сделать в регулярном выражении?

что-то в этом роде (8 | 10 | 12) \ d {n} => Общая длина 10 или 11

Ответы [ 3 ]

1 голос
/ 25 марта 2010

Вам, вероятно, придется рассматривать разные случаи (т.е. длину кода города) отдельно, например:

^(8\d{9,10}|(10|12)\d{8,9}|981\d{7,8})$

Или вы используете прогнозные или прогнозные утверждения :

^(?=\d{10,11})…$
1 голос
/ 25 марта 2010

А как же ^(?:8\d{9,10}|(?:10|12)\d{8,9}$?

Edit: Тогда не делайте этого в регулярных выражениях. Псевдокод:

function check(number):
  array areaCodes = array(8, 10, 12, 981)
  if !number ~= '^\d{10,11}$':
    return false
  foreach in areaCodes as code:
    if (substring(number, 0, length(code) - 1) == code) return true
  return false
0 голосов
/ 03 декабря 2010

Попытка, которую я предпринял для Нидерландов, у которых есть 2- и 3-значные коды зоны с соответственно 7- и 6-значными абонентскими номерами (и некоторые незавершенные маршруты другой длины):

\+31(?:(?:(?#AREA2D)1[035]|2[0346]|3[03568]|4[0356]|5[0358]|7\d)[2-8]\d{6}|(?:(?#AREA3D)11[134578]|16[124-8]|17[24]|18[0-467]|22[2346-9]|25[125]|29[479]|31[3-8]|32[01]|34[1-8]|41[12368]|47[58]|48[15-8]|49[23579]|51[1-9]|52[1-5789]|54[13-8]|56[126]|57[0-3578]|59[1-9])[2-8]\d{5}|(?:(?#OTHER10D)6[1-68]|8[4578]|91)\d{7})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...