文字列が次の形式であることを確認する必要があります。そうでない場合は、警告メッセージを返す必要があります。
紫|ぶどうジュース
緑|レタスはサラダにいい
黄色|サルはバナナみたい
赤|すいかはおいしい
上記のようにパイプで区切られたデータで必要です。各行は2つのチャンクに分割され、次に新しい行になります。
1 列に 3 本のパイプがある場合、それは正しくありません。
この RegEx は、文字列全体を仕様に合わせて検証します。^(\w+\|[\w ]+(\n|$))+$
行の 1 つが無効な場合、preg_match()
は を返しfalse
ます。
注: 左の部分には数字と文字のみが含まれ、2 番目の部分には同じスペースが含まれていると想定
しました。
したがって、必要なコードは次のとおりです。
if (!preg_match($regex,$string)) trigger_error("Invalid string!",E_USER_WARNING);
何を取得しようとしているのかはわかりませんが、次のようなものが必要であると推測される場合:
<?
$lines = explode("\n",$str);
foreach ($lines as $lineIndex => $oneLine)
if (count(explode('|',$oneLine))>2) echo "You have an error in line ".$lineIndex;
?>
必要なのは正規表現の一致だけです。文字列を新しい行で分割し、各行で RegExp 一致を実行します。一致が false を返した場合は、関数を早期に終了します (短絡)。RegExp は基本的に START_OF_LINE (^) であり、パイプ ([^\|] ) とパイプ (\|) およびパイプ ([^\|] ) と END_OF_LINE ($) 以外のものです。
function verify($str) {
$regex = '/^[^\|]*\|[^\|]*$/';
$all = explode("\n", $str);
foreach($all as $line) {
if(preg_match($regex, $line) == false)
return false;
}
return true;
}
echo verify("bad") === false;
echo verify("bad|bad|bad") === false;
echo verify("abc|123\nbad") === false;
echo verify("abc|123\nbad|bad|bad") === false;
echo verify("good|good") === true;
echo verify("good|good\nnice|nice") === true;