2017-06-18 3 views
0

最近、入力フォームをテキストからテキストエリアに切り替えて、複数行のテキストを入力できるようにしました。 検証する場合を除いて、フォームは正常に動作しています。それは1行であれば、問題はありませんが、私は2番目の行に折り返さテキストを入力するとき、私はここに私のコードである(文字と数字のみが許可されている)私のフォームバリデータからエラーを取得する:phpフォームのテキストエリアでのバリデーション

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'; 
} 
} 
} 
+0

あなたの関数は、あまりにも多くのことを意味するパラメータが多すぎます。他の機能に機能を割り当てることを親切に考えてください。 –

答えて

1

あなたの正規表現は新しい行を許可しません。試してみてください:あなたはそれをリテラルになりたい場合は

^[-a-zA-Z0-9\s.:,]*$ 

-は、それ以外の場合は範囲​​を作る、最初または最後の文字でなければなりません。

\sここでは、スペース、改行、タブを1つずつ使用できます。あなたは+に数量詞を変更した場合は

Additional reading\sに)あなたは(エラーメッセージがが少なく、特定のだろう)、あなたのデフォルト$min要件を取るだろう文字列、以上の1つの文字があることを確認することができます。

+0

ちょっとメモ、ここでは同じパターンが凝縮されています: '/^[ - a-z \ d \ s。:、] * $/i' – mickmackusa

+0

お返事ありがとうございました。面白いmickmackusa – cbspaulding

+0

mickmackusaの正規表現/^[-az\d\s.:,]*$/iは問題を解決しましたが、^ [ - a-zA-Z0-9 \ s]と同じ検証エラーがあります。 :、] * $わからない理由は? – cbspaulding

関連する問題