摘要:正则表达式是设计为用来匹配文本的,可是论坛里头老是有这种问题:
“谁能帮我写个正则表达式,验证从0到180的数字。”
我说,正则表达式不是用来干这个的,匹配和验证是不一样的概念,数据验证过程可能包含很复杂的逻辑,而这个时候要用文本匹配来模拟,就变得很不科学。虽然,这个问题对于正则表达式并不是无解,可以写成这样:
^([0-9]{1,2}|1[0-7][0-9]|180)$
但用编程语言来判断显然方便直观的多,(x >= 0 && x <= 180)就可以了。你大概觉得上头那个正则表达式还不算复杂,那么看看这个:
“匹配从874到142857的数字。”
那正则表达式就得写成:
^(87[4-9]|8[8-9][0-9]|9[0-9]{2}|[1-9][0-9]{3,4}|1[0-3][0-9]{4}|14[0-1][0-9]{3}|142[0-7][0-9]{2}|1428[0-4][0-9]|14285[0-7])$
尽管还是可以做到,不过这个就有点走火入魔了。
不过呢,如果你非得这么做(比如客户逼你,我就是...),那我写了个小工具来干这个事情(写这种正则表达式,毕竟还是有规律可循)。下面是截图:
刚才那两个正则表达式,也是用这个工具生成的。代码在这里。
P.S.这个工具目前尚不支持小数和负数,也许你可以基于我提供的代码写个更完整的版本出来。(不过,真的有必要吗?)此外,这个工具尚未经过严格测试。发现问题了请给我发邮件或者在这里留言,多谢。...[
阅读全文]