1

データベースにデータを保存するために、ユーザーが自分の都市と国をカンマで区切って入力する必要があります。

今私の現在のコードは次のとおりです。

if (empty($_POST['location']) || substr_count($_POST['location'], ',') != 1) 

ただし、これはコンマが1つ指定されているかどうかのみをチェックします。コンマが 1 つと、コンマの前後に 1 つの単語があるかどうかを確認したい。また、これらの単語には少なくとも 2 文字が必要です。1 文字 (?) の国や都市はないと思います。

編集:1文字だけの都市があることを知りました. だから私の最後の言葉を忘れてください。

4

3 に答える 3

3

もちろん。preg_match/,\s*\w{2,}/これを教えてくれます:

if (preg_match('/,\s*\w{2,}/', $_POST['location'])) {
    //Yep - there's a comma followed by at least two characters in there!
}

剖検:

  • ,- リテラル,文字
  • \s*- スペース/タブ/改行文字を 0 回から無制限に繰り返す
  • \w{2,}- 任意の文字を 2 回から無制限に繰り返す

空のものもチェックしているようです。

<?php
    $invalid = false;
    $split = preg_split('/,\s*/', $_POST['location']);
    foreach ($split as $part) {
        if (strlen($part) < 2) {
            $invalid = true;
            break;
        }
    }

    if (!$invalid) {
        echo 'Success!';
    } else {
        echo 'Error!';
    }
?>

あなたのために仕事をするために単一の正規表現が必要な場合は、これを行うことができます:

if (preg_match('/^(\w{2,},\s*)*(\w{2,})$/', $_POST['location'])) {
    echo 'Success!';
} else {
    echo 'Error!';
}

デモ

OK    city,country   
ERROR ok, city,country,   
ERROR n, foo, bar   
ERROR foo, bar, n   
ERROR ,foo, bar, test   
OK    foo,bar   
OK    foobar
于 2013-10-25T12:20:51.783 に答える
0

正規表現はあなたの友達です

if(empty($_POST['location']) || !preg_match('/.+, .+/', $_POST['location'])
于 2013-10-25T12:20:59.670 に答える
-1

これを行う:

if(preg_match('/^.[a-zA-Z]+.( )?,.( )?.[a-zA-Z]+$/i', $_POST['location']))
于 2013-10-25T12:24:59.890 に答える