textarea

时间:2017-06-18 17:31:16

标签: php regex validation newline

我最近将输入表单从文本切换到textarea,这样我就可以有多行文本。 表单工作正常,除非我去验证。如果它是一行,没有问题但是当我输入包装到第二行的文本时,我从表单验证器中得到错误(只允许字母和数字)这里是我的代码:

private function validate_alnum($var, $min=0, $max=0, $required=false, $err="") {
   if($required==false && strlen($this->source[$var]) == 0) {
          return true;
 }
 if(isset($this->source[$var])){
   if(strlen($this->source[$var]) < $min) {
     $this->errors[$var] = $err . ' is too short. It has to be at least '.$min. ' character(s)';
   } elseif(strlen($this->source[$var]) > $max) {
      $this->errors[$var] = $err . " is too long. It can't be more than ".$max. " characters";
    } elseif(!preg_match("/^[a-zA-Z0-9 -.:,]*$/", $this->source[$var])) {
$this->errors[$var] = $err . ' is invalid.  Only letters and numbers are allowed';
}
}
}

1 个答案:

答案 0 :(得分:1)

你的正则表达式不允许换行。尝试:

^[-a-zA-Z0-9\s.:,]*$
如果你希望它是文字的话,

-也应该是第一个或最后一个字符,否则它会产生一个范围。

这里的\s将允许单个空格,新行和制表符。 (\s

上的Additional reading

如果您将量词更改为+,您可以确定字符串中有多个字符,这将取消您的默认$min要求(尽管错误消息不太具体)