7

私は現在、いくつかの PHP フォーム検証を作成しており (既にクライアント側を検証済みです)、素敵な小さな PHP 関数でうまく機能すると思われる繰り返しコードがいくつかあります。しかし、私はそれを機能させるのに苦労しています。それは単なる構文の問題だと確信していますが、それを突き止めることはできません。

どんな助けでも感謝します。

//Validate phone number field to ensure 8 digits, no spaces.
if(0 === preg_match("/^[0-9]{8}$/",$_POST['Phone']) {
    $errors['Phone'] = "Incorrect format for 'Phone'";
}

if(!$errors) {
    //Do some stuff here....
}

検証コードを何度も書いていて、関数を作成することで時間とコード行を節約できることがわかりました。

//Validate Function
function validate($regex,$index,$message) {
    if(0 === preg_match($regex,$_POST[$index])) {
        $errors[$index] = $message;
    }

と、そう呼んで……。

validate("/^[0-9]{8}$/","Phone","Incorrect format for Phone");

なぜこれがうまくいかないのか誰にもわかりますか?

エラーをトリガーするためにこれに取り組んでいる間、クライアント側の検証を無効にしたため、「電話」に送信している値が無効であることに注意してください。

4

3 に答える 3

4

もう少し考え抜かれたものを試してみましょう。

これを次のように使用します。

if (validate(...)) {
    // It's ok
}

次に、これを提案します:

function validate($regex, $index, $message, &$errors) {     
    if (isset($_POST[$index]) && 1 === preg_match($regex, $_POST[$index])) {
        return true;            
    }
    $errors[$index] = $message; 
    return false;        
}

これで、エラー時に検証からダンプする機会が得られます。または、$errors を渡してこれらを連鎖させ、検証エラーで埋めることができます。グローバルは使用されません。

于 2012-12-19T05:29:21.310 に答える
1

ここに修正があります:

//Validate Function
function validate($regex,$index,$message) {
    global $errors;
    if(0 === preg_match($regex,$_POST[$index])) {
        $errors[$index] = $message;
    }
}

問題は次のとおりです。

if(0 === preg_match($regex,$_POST[$index],$message)

$message、文字列は、一致の配列が行くはずの場所です。あなたはそれを必要としません。

マニュアルから: int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

http://php.net/manual/en/function.preg-match.php

于 2012-12-19T05:11:58.623 に答える
0

検証関数の if の閉じ括弧がありません これを変更してください

if(0 === preg_match($regex,$_POST[$index],$message)

これに

if(0 === preg_match($regex,$_POST[$index],$message))
于 2012-12-19T05:30:54.750 に答える