用于匹配9-23位数的正则表达式,其中包含任意数量的空格或破折号

时间:2011-03-28 18:09:20

标签: regex

我尝试了以下正则表达式,但似乎不允许使用嵌套的“[]”。

[\d[\s-]*]{9-23}

4 个答案:

答案 0 :(得分:5)

你走在正确的轨道上,你正在寻找的可能是:

(\d[\s-]*){8,22}\d
  • 一个数字
  • 后跟任意数量的空格/破折号
  • 8-22次
  • 后跟最后一位数字

答案 1 :(得分:2)

您似乎不希望匹配前导或尾随空格和破折号,因此我认为可行的模式是:

^\d([- ]*\d){8,22}$

即:一个数字,后跟8到22组零个或多个破折号或空格后跟一个数字。

另一个可能更明显的解决方案是这个两步解决方案:

  1. 匹配\ d [ - \ d] + \ d以确保您有一串数字,空格和短划线,其中包含至少一位数的开头和结尾
  2. 仅删除数字并计算您拥有的数量

答案 2 :(得分:0)

我们试试这个:

([0-9][ -]*){9,23}

这个正则表达式太缺了回答所以这是我最喜欢的

答案 3 :(得分:0)

对于它的价值,您可以考虑将其分为两个步骤。例如,在C#中,您可以执行类似的操作。

Regex.Match(Regex.Replace(str, "[ -]", ""), @"^\d{9,23}")

这是两个字符串操作,因此当然对您来说可能会有性能损失。但对于下一个人来说,它可能更具可读性。