我尝试了以下正则表达式,但似乎不允许使用嵌套的“[]”。
[\d[\s-]*]{9-23}
答案 0 :(得分:5)
你走在正确的轨道上,你正在寻找的可能是:
(\d[\s-]*){8,22}\d
答案 1 :(得分:2)
您似乎不希望匹配前导或尾随空格和破折号,因此我认为可行的模式是:
^\d([- ]*\d){8,22}$
即:一个数字,后跟8到22组零个或多个破折号或空格后跟一个数字。
另一个可能更明显的解决方案是这个两步解决方案:
答案 2 :(得分:0)
我们试试这个:
([0-9][ -]*){9,23}
这个正则表达式太缺了回答所以这是我最喜欢的
答案 3 :(得分:0)
对于它的价值,您可以考虑将其分为两个步骤。例如,在C#中,您可以执行类似的操作。
Regex.Match(Regex.Replace(str, "[ -]", ""), @"^\d{9,23}")
这是两个字符串操作,因此当然对您来说可能会有性能损失。但对于下一个人来说,它可能更具可读性。