2014-03-03 80 views
1

我需要用下面的正则表达式的帮助:正则表达式不工作的expcted

(0 ?)([1-8] ?){1}(\d ?){9}|(\d ?){10} 
  • 正则表达式应该匹配或者或11位
  • 第一位应为0
  • 第二位数字应该包含从1 - 8位数字 only
  • 所有数字可以在之间有空格,例如, 0 1 2 7 4 3 3 3 4 4 4
  • 数字可以没有空格,例如01274333444

我创建的正则表达式适用于除第三个条件之外的大多数场景,即第二个数字只能包含1-8个数字。 任何帮助非常感谢

+0

您的正则表达式匹配11或12位数字。 – devnull

+0

有一个非常酷的在线工具来测试正则表达式:http://regex101.com/你可能想试试看。您可以输入数字并查看它们何时匹配。它也解释了你正在选择的东西。 – helderdarocha

回答

0

试试这个:

^(0\s?)([1-8]\s?)(\d\s?){8,9}$ 
+0

感谢这个作品像一个魅力:) – ConfusedCoder

1

您可以使用此:

^0 ?[1-8] ?(?:[0-9] ?){8,9}$ 

我用锚^$,以确保没有开头或结尾的数字。

2

这是你的正则表达式(0 ?)([1-8] ?){1}(\d ?){9}|(\d ?){10}目前正在做什么:

Regular expression visualization

它也试图匹配11个或12位数字,而不是10或11

你需要做的是改变它以下方法之一:

  • 添加组的OR |周围,以限制它的范围:(0 ?)([1-8] ?){1}(?:(\d ?){8}|(\d ?){9})

Regular expression visualization

  • 或优选将其更改为8或9的字符匹配:(0 ?)([1-8] ?){1}(\d ?){8,9}

Regular expression visualization

+0

非常感谢你这是非常好的解释。我无法在这个阶段投票,否则会投你的答案:) – ConfusedCoder