3

簡単なサンプルを作成して、PHP で正規表現を学習しようとしています。次のような非常に簡単な例があります。

if($_POST){
   $errors = array();

  if(isset($_POST['name'])){
     if(!preg_match('/^([a-zA-Z]{3,8})$/',$_POST['name'])){
       $errors['name1'] = "Must enter Alphabet";
       $errors['name2'] = ""Cant be less than 3";
     }

  }
  if(count($errors)==0){
  header("Location: pro.php");
  exit();
  }
}
?>

<form method="POST" target="">
First name: <input type="text" name="name"><br>
<input type="submit" name="submit">
</form>

$errors['name1']私にとって、検証は正常に機能していますが、エラーに基づいてエラーメッセージを表示する際に問題があります。たとえば、文字列が入力されておらず$errors['name2']、数字が入力されている場合にのみエラーを表示したいと思います。式を次の 2 つの基準に分けようとしました。

if(isset($_POST['name']))
   {
     if(!preg_match('/^([a-zA-Z])$/',$_POST['name']))
     {
       $errors['name1'] = "Must enter Alphabet";
     }
      if(preg_match('/^{3,8}$/',$_POST['name']))
     {
       $errors['name2'] = "Cant be less than 3";
     }
   }

しかし、次のエラーが発生しています ここに画像の説明を入力

アップデート

if(isset($_POST['name']))
   {
     if(!preg_match('/^([a-zA-Z])$/',$_POST['name']))
     {
       $errors['name1'] = "Must enter Alphabet";
     }
      if ( ! preg_match( '/.{3,8}/', $_POST['name'] ))
     {
       $errors['name2'] = "Cant be less than 3";
     }
   }
4

3 に答える 3

0

表示されているエラーは、{} 演算子の前に正規表現で一致基準を指定しなかった結果です。いずれかの文字が 3 つ以上入力されているかどうかだけを気にする場合は、試してください。

if ( ! preg_match( '/.{3,8}/', $haystack ) )

カウントする範囲には「アトム」を指定する必要があります。この場合、 '。' 任意の 1 文字を表します。

于 2013-08-30T03:46:24.700 に答える
0

わかりました。質問にお答えします。Masud Alamのおかげで、正規表現でこれを行う方法がわかりました。ヒントは

 if (!preg_match('/^[a-z]+$/i', $_POST['name'])) {
     //
 }

 if (!preg_match('/^.{3,25}$/', $_POST['name'])) {
     //
 }

これまでのところ私にとってはうまくいきます!

于 2013-08-30T18:52:39.430 に答える
0

どうですか:

if (isset($_POST['name'])) {
    if (preg_match('/[^a-z])/i', $_POST['name'])) {
        $errors['name1'] = "Must enter Alphabet";
    }
    if ( strlen($_POST['name']) < 3) {
        $errors['name2'] = "Cant be less than 3";
    }
    if ( strlen($_POST['name']) > 8) {
        $errors['name3'] = "Cant be more than 8";
    }
}

本当に正規表現を使用したい場合:

if (preg_match('/[^a-z])/i', $_POST['name'])) {
    $errors['name1'] = "Must enter Alphabet";
}
if ( ! preg_match('/^.{3,8}$/', $_POST['name']) ) {
    $errors['name2'] = "Cant be less than 3";
}
于 2013-08-30T09:13:48.293 に答える