関数だけを使用する代わりに、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";
?>
同様に、それぞれのセクションの数値を一致させ、すべてのリテラルを反復処理し、値が一致しない場合はフラグを再度使用できます。
このようなもの:
<?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";
?>
明らかに、これはソリューションの中で最良/最適化されたものではありません。