2
<?
    $s = '';
    $string1 = '<script>';
    $string2 = 'färsk';
    $string3 = 'öde';

    $rex = "/[\^<@\/\{\}\!\*\$%\?=≤&gt;€:\|;#]+/i";
    if (preg_match($rex,$string1)) { $s = NULL; }
    if ($s === NULL) { echo 'null'; } else { echo "not null"; }
?>

$string2 が null を与えるのはなぜですか? 'ä' 文字の何がそんなに特別なのですか? 他のスウェーデン語の å と ö は正規表現をうまく通過します。

私の正規表現の修正に感謝します。その正規表現で定義された特殊文字を除くすべてを許可したい。

編集:


明確化: 私がやりたいことは、特殊文字のリスト以外は何でも通過させることです。$string2 と 3 は両方通過する必要がありますが、$string 1 は通過しません (< と > のため)。

4

1 に答える 1

3

不必要なエスケープは避けてください。以下のコードを参照してください。

$string1 = '<script>';
$string2 = 'färsk';
$string3 = 'öde';

$rex = "/^[^<>@\/{}!*$%?=≤€:|;#]+$/u";

var_dump (preg_match($rex, $string1)); // false
var_dump (preg_match($rex, $string2)); // true as no special char in character class
var_dump (preg_match($rex, $string3)); // true as no special char in character class
于 2013-10-08T18:55:58.130 に答える