2010-12-17 29 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

相关问题