2011-09-07 44 views

回答

0

这应该与你需要的数字:

^(?:9[0-9]{2}(?:[79][0-9]|8[0-8])[0-9]{4}|[0-8][0-9]{8})$ 

9[0-9]{2}(?:[79][0-9]|8[0-8])[0-9]{4}将匹配以9开始的数字,并[0-8][0-9]{8}将剩下的匹配。 (不以900-999开头,不以9开头)。
例子:http://rubular.com/r/6uVWC0cLgX

如果你的气息支持,您可以使用lookahead简化模式:

^(?:9(?=..(?!89)[7-9])|[0-8])[0-9]{8}$ 

这里唯一的问题是第一位。它可以匹配一个9和2个数字,以及一个70和99之间的数字(但不是89),然后再多8个数字。
例如:http://rubular.com/r/UVVkfJ3v3V

+0

对于条件正则表达式,这几乎是一个很好的用例,(^(?(?= ...(?!89)[7-9])9 | [0-8])[0-9] { 8} $',但仍然不如前视变体。 – Kobi

2

这里是会找到以900全部九位数字符合您的条件的正则表达式:

^9[0-9][0-9](7[0-9]|8[0-8]|9[0-9])[0-9]{4} 

上述正则表达式的第二部分是一个OR条件(使用|符号)的匹配70 - 79,80 - 88和90 - 99模式。在像http://regexpal.com/这样的在线测试器上测试它,看看它是如何工作的。如果你想排除无效数字,你可能需要改变条件来寻找无效数字(例如那些以900开头的数字,其中第四位数字是6或更少)。

+0

小评论:您忘了其余的数字,您还需要'| [0-8] [0-9] {8}'。不知何故,我没有意识到你的回答是正确的,直到我完成我的任务,这非常相似。欢迎来到堆栈溢出。 – Kobi

+0

+1,但请将所有'[0-9]'改为'\ d',以使正则表达式看起来更好一些(除非您担心在输入数据中处理其他编号系统)。 –

相关问题