2010-08-23 65 views
1

我一直試圖使用preg_match和"/^[a-zA-Z0-9_-]+$/"試圖確保給出的字符串只包含那裏的字符而沒有其他字符,但它似乎沒有正確地計數$以便它匹配一直到該行的末尾,但它確實需要在使用^的字符串開始處進行匹配。使用正則表達式在PHP中檢查字符串格式

如果我使用{3,}代替+"/^[a-zA-Z0-9_-]{3,}$/"這是我怎麼過的起初,我可以寫3個字母/數字 - 或者_,然後任意字符以外的其他,它會指望它作爲搭配。

代碼:

if(preg_match("/^[a-zA-Z0-9_-]+$/", $value, $arr) && strlen($value) > 3) 
    { 
    echo $good .' Ok'; 
    } 
    else 
    { 
    echo $bad .' Invalid username. (letters & numbers only)'; 
    } 

使用像下面爲$值,它告訴我,這是確定的時候,應該來了,因爲空間或&字符爲無效的用戶名。

一字一句

字&字

而事實證明,這是因爲值正在通過$ _GET和東西$值發送到頁面,如「字&字「作爲」單詞「取而代之......有沒有辦法解決這個問題?

+1

這應該工作,看到http://rubular.com/r/NCA8fghoxo – quantumSoup 2010-08-23 14:40:42

+4

你能舉幾個例子,其字符串應該匹配和唐不工作? (也是你的PHP代碼,也許你做錯了什麼,正則表達式對我來說很好)。 – 2010-08-23 14:41:00

+0

所以你可以只有字母和數字 – 2010-08-23 14:49:21

回答

0

而事實證明,這是因爲 值正在通過$ _GET和東西 $值發送到 的頁面,如「字&詞」來爲「詞」 ,而不是...有沒有辦法解決這個問題?

你需要的符號編碼中的網址:

[URL] /script.php?string=word &字

成爲

[URL] /腳本。 php?string = word & amp; word

如果鏈接是由PHP生成的,請嘗試使用urlencode

編輯或嘗試使用_POST代替。

2

而事實證明,這是因爲值被送往通過$ _GET和$東西值的頁面,如「字&詞」來爲「字」,而不是......是有辦法解決這個問題?

我在這裏扔野生猜測,你從瀏覽器中調用爲http://yoursite/page.php?something=word&word你的PHP頁面讀取$_GET['something']word,而不是你預期word&word

嗯,這是因爲文字符號符號被視爲$ _GET參數分隔符,並且任何要包含在參數值中的&符號都必須按照%26進行網址編碼,如在http://yoursite/page.php?something=word%26word中。在PHP中,你可以使用函數urlencode()編碼的字符串值:

$url = 'http://yoursite/page.php?something=' . urlencode('word&word'); 
+0

腳註是'$ _GET'和'$ _POST'自動urldecoded,所以沒有必要在另一端手動'urldecode()'。 – 2010-08-23 18:14:54