在PHP简单验证中使用正则表达式的问题

时间:2013-08-30 03:25:06

标签: php preg-match

我试图通过创建简单的样本来学习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']进入。 我试图将表达式分为两个标准:

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";
     }
   }

但我收到了以下错误 enter image description here

更新

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";
     }
   }

3 个答案:

答案 0 :(得分:0)

您看到的错误是在{}运算符之前未在正则表达式中指定匹配条件的结果。如果您只关心是否输入了至少三个任何字符,请尝试

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

您必须为要计算的范围提供“原子”。在这种情况下, '。'表示任何单个字符。

答案 1 :(得分: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";
}

答案 2 :(得分:0)

好的我将回答我的问题。感谢Masud Alam我想出了如何在正则表达式中做到这一点。提示正在使用

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

 if (!preg_match('/^.{3,25}$/', $_POST['name'])) {
     //
 }
到目前为止它对我有用!