1

文字列が次の形式であることを確認する必要があります。そうでない場合は、警告メッセージを返す必要があります。

紫|ぶどうジュース
緑|レタスはサラダにいい
黄色|サルはバナナみたい
赤|すいかはおいしい

上記のようにパイプで区切られたデータで必要です。各行は2つのチャンクに分割され、次に新しい行になります。

1 列に 3 本のパイプがある場合、それは正しくありません。

4

3 に答える 3

1

この RegEx は、文字列全体を仕様に合わせて検証します。^(\w+\|[\w ]+(\n|$))+$
行の 1 つが無効な場合、preg_match()は を返しfalseます。
注: 左の部分には数字と文字のみが含まれ、2 番目の部分には同じスペースが含まれていると想定
しました。

したがって、必要なコードは次のとおりです。

if (!preg_match($regex,$string)) trigger_error("Invalid string!",E_USER_WARNING);

ライブコード: http://codepad.viper-7.com/i3Hcjs

于 2013-03-19T19:16:26.260 に答える
0

何を取得しようとしているのかはわかりませんが、次のようなものが必要であると推測される場合:

<?
$lines = explode("\n",$str);

foreach ($lines as $lineIndex => $oneLine)
    if (count(explode('|',$oneLine))>2) echo "You have an error in line ".$lineIndex;

?>
于 2013-03-19T18:48:13.037 に答える
0

必要なのは正規表現の一致だけです。文字列を新しい行で分割し、各行で 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;
于 2013-03-19T19:19:13.650 に答える