2010-12-17 51 views
0

比方說,我有一個HTML頁面,其中包含一個要求用戶輸入單詞的文本字段。然後,我在我的PHP腳本中使用$_POST[]變量來玩變量並做一些事情。我的頁面和我的PHP腳本可以使用UTF-8編碼,因此用戶可以輸入任何內容。如何確保一個字符串只包含預定義的已接受字符列表中的字符?

我想知道的是,我該如何確保用戶輸入的單詞中包含的所有字符都是預定義字符列表的一部分?

例如,該列表將包含字符0到9,a到z,A到Z,但還包括其他字符,如ü,ù,ô,é,à,ẑ等等。我不想要的東西,就像а,з,б,у等俄語字母和其他種類的異國字符一樣。

我可以使用正則表達式,但它是最合適的解決方案嗎?不是太慢?那麼包含所有角色的陣列呢?是我還是聽起來非常慢,循環遍歷單詞的每個字符,並循環接受的字符數組並測試每個組合。

你知道一個好的解決方案嗎?

感謝。

+0

看來你很關心速度。爲什麼不使用JavaScript? – Babiker 2010-12-17 03:13:22

+0

因爲我更喜歡服務器端的數據驗證。我擔心速度,但是我想過的解決方案真的很慢嗎?也許我錯了。 – 2010-12-17 03:27:51

+2

正則表達式應該沒問題,不要擔心事物的速度有多快,直到你知道瓶頸的位置(提示:它們可能不在你認爲的位置)。 – 2010-12-17 03:33:18

回答

2

RE的速度很快,而且它們是要走的路。創建你想要的字符列表,然後反轉匹配感,如下所示。

if re.match(".*[^abcA-Z]", "d"): 
    print "Your string has illegal characters" 
+0

謝謝。我想我會堅持這種做法。 – 2010-12-17 03:44:26

相關問題