我必须检查CPR是否有效,所以我必须检查这些东西:
年和月的范围必须有效并且是最后的。最后5位数字是0到9的任意随机数字。这是我做的,但是所有的心肺复苏都显示为无效
^(([8-9][0-9]|[0-1][0-9]|2[0-3]){2})(0[1-9]|1[0-2])(\d{5})$
hvvq6cgz1#
使用^([01289])\d(0[1-9]|1[012])\d{5}$。请参见regex demonstrator
^([01289])\d(0[1-9]|1[012])\d{5}$
avwztpqn2#
在某个时候,你需要对验证规则进行更改,你会回到这段代码,然后说“WTF,这个正则表达式甚至可以吗?”,这可能是一周后的事情。将其分解为子字符串很容易,可读性更强,可扩展性更强。例如:如何在正则表达式代码中添加描述性错误消息?
function validate($str) { $yr = intval(substr($str, 0, 2)); $mo = intval(substr($str, 2, 2)); $code = substr($str, 4); if( !(($yr >= 80 && $yr <= 99) || ( $yr >= 0 && $yr <= 23)) ) { echo "Year $yr out of range.\n"; return false; } if( $mo < 1 || $mo > 12 ) { echo "Month $mo out of range.\n"; return false; } return true; } var_dump( validate('800412233'), validate('790412233'), validate('240412233'), validate('800012233'), validate('801312233'), );
输出:
Year 79 out of range. Year 24 out of range. Month 0 out of range. Month 13 out of range. bool(true) bool(false) bool(false) bool(false) bool(false)
apeeds0o3#
试试看
^([0189][0-9]|2[0-3])(0[1-9]|1[1-2])(\d{5})$
3条答案
按热度按时间hvvq6cgz1#
使用
^([01289])\d(0[1-9]|1[012])\d{5}$
。请参见regex demonstratoravwztpqn2#
在某个时候,你需要对验证规则进行更改,你会回到这段代码,然后说“WTF,这个正则表达式甚至可以吗?”,这可能是一周后的事情。
将其分解为子字符串很容易,可读性更强,可扩展性更强。例如:如何在正则表达式代码中添加描述性错误消息?
输出:
apeeds0o3#
试试看