0

このトピックに関する他のすべての投稿を見てきましたが、正規表現でアポストロフィを許可することはまだできません。以下はうまくいくはずだと思っていましたが、エラーが発生し続けます。' だけでなく、他のすべての文字、数字、文字を許可します (マイクのような単語には必要です)。

/^([-a-zA-Z\/\-\&\\\?\!\,\.\'\"\s0-9@:=_]{1,1000})$/

正規表現は、フォームおよび次の一部の検証に必要です。

public $regex = array ('char' => "/^[a-zA-Z.\s]{0,50}$/", 
                       'misc' => "/^([-a-zA-Z\/\-\&\\\?\!\,\.\'\"\s0-9@:=_]{1,1000})$/");

if(preg_match($this->regex[$validation],$this->filteredValue[$fieldName])) { 
    $this->messageArray[$fieldName] = '<span class="cheers"> &nbsp; Thank You</span>';   
}

どこが間違っているのか教えてもらえますか?

4

1 に答える 1

2

動作する\'はずです。なぜそうしないのかは言えません。ただし、回避策を提供できます。'を同じ文字の 16 進表現に置き換えることができます。を使用する代わりに、使用して\'みてください\x1b

また、 をの末尾に移動する必要があります\--[]

/^([-a-zA-Z\/\&\\\?\!\,\.\x1b\"\s0-9@:=_-]{1,1000})$/

そして、最初の意味がわかりません-...


編集:あなたが得たエラーに関するあなたの最後のコメントを見た後、あなたが抱えている問題を誤って特定したとしか思えません。あなたの正規表現はすべて問題ないと思いますが、データをエスケープしていないため、SQLステートメントに問題があります。

よく理解mysql_real_escape_stringし、すべてのクエリで使用するようにしてください。例えば:

<?php
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));
mysql_query($query);

?>
于 2012-09-03T05:52:28.713 に答える