use*_*192 6 php regex preg-match
我不是很擅长找到正确的正则表达式的自动化,生成不同的表达式,但是当这涉及PHP的脚本时,它变得很麻烦.我无法证明自己能够在preg_match中编写一个"适合"表达式的模式,如:123-23-345 ... 123-34-456 .... 12-234-56 .....它应该是3组数字,其中每个组,从左到右分类,并且每个下一组都没有比前一组的最大数字大的数字.这个:123-23-456会错,因为23中的2比123中的3小.123-43-45再次出错,因为43应该是34 ......
这应该可以帮助我验证可能只包含该类型内容的字段.它应该是正则表达式验证而不是解析,拆分的函数...
您不仅需要使用preg_函数,还需要使用其他一些条件匹配。
<?php
$str = "123-34-456";
preg_match( "/^.*?(\d)\-(\d).*?(\d)\-(\d)/", $str, $matches );
$flag = true;
if( $matches[2] < $matches[1] )
$flag = false;
if( $matches[4] < $matches[3] )
$flag = false;
echo ( !$flag ) ? "ERROR" : "NO ERROR";
?>
Run Code Online (Sandbox Code Playgroud)
同样,您可以匹配各个部分中的数字,迭代所有文字,然后再次使用该标志来表示不匹配的值。
像这样的东西:
<?php
$str = "132-34-456";
preg_match( "/^(\S+)\-(\S+)\-(\S+)$/", $str, $matches );
$flag = true;
for( $i = 0; $i < strlen($matches[1]) - 1; $i++ ) {
if( $matches[1][$i+1] < $matches[1][$i] ) {
$flag = false;
break;
}
}
for( $i = 0; $i < strlen($matches[2]) - 1; $i++ ) {
if( $matches[2][$i+1] < $matches[2][$i] ) {
$flag = false;
break;
}
}
for( $i = 0; $i < strlen($matches[3]) - 1; $i++ ) {
if( $matches[3][$i+1] < $matches[3][$i] ) {
$flag = false;
break;
}
}
echo ( !$flag ) ? "ERROR" : "NO ERROR";
?>
Run Code Online (Sandbox Code Playgroud)
显然,这不是最好/最优化的解决方案。