2013-10-08 19 views
2
<? 
    $s = ''; 
    $string1 = '<script>'; 
    $string2 = 'färsk'; 
    $string3 = 'öde'; 

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

爲什麼$字符串2給空? 「ä」角色有什麼特別之處?其他瑞典的,Ö和ö通過正則表達式。PHP的正則表達式與字符 'a'

欣賞任何修復我的正則表達式。我希望它允許除正則表達式中定義的特殊字符之外的所有內容。

編輯:


澄清: 我想要做的就是讓任何東西,但通過特殊字符列表。 $ string2和3都應該通過,$ string 1不應該(因爲<和>)。

+1

string2或3如何匹配?你不允許在正則表達式中使用字母字符。字符串只匹配,因爲它的'<' and '>'字符。 –

+0

可能http://www.php.net/manual/en/function.preg-match.php#94424幫助你 –

+0

@MarcB準確,我不希望他們匹配 - 但$ string2匹配反正,那是我的問題。 Ä不是一個超過Ö的特殊字符。我想讓任何東西通過,除了一些特殊的字符,如<| [等 – Mattis

回答

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 
+0

啊,感謝您清理正則表達式,但我認爲您誤解了我的問題。我想允許除了一堆特殊字符如< > {} @等之外的任何內容。string2和3都應該通過,string1不應該。 – Mattis

+0

好吧,現在檢查編輯後的代碼,'^'不應該在字符類中被否定。 – anubhava

+0

正如我所說,$ string2和3都應該通過。 ä不是一個比ö更特別的字符 - 因此是我的問題。在你的例子中$ string2仍然是錯誤的。 – Mattis