正则表达式&&逻辑条件(瑞典的电话号码)

时间:2010-03-25 17:16:22

标签: ruby regex

8,10,12,981(瑞典的区号很少)。电话号码总数可以是10或11(仅限数字) 如果是8 + 9或10位数 如果是981 + 7或8位数 这可以在正则表达式中完成吗?

像这样的东西......嗯 (8 | 10 | 12)\ d {n} =>总长度10或11

3 个答案:

答案 0 :(得分:1)

^(?:8\d{9,10}|(?:10|12)\d{8,9}$怎么样?

修改 然后不要在正则表达式中这样做。伪代码:

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

答案 1 :(得分:1)

您可能需要分别处理不同的情况(即区号长度),例如:

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

或者您使用look-ahead or look-behind assertions

^(?=\d{10,11})…$

答案 2 :(得分:0)

我为荷兰做了一次尝试,它有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})