2009-08-07 33 views
0

我试图创建一个正则表达式来检查提交的标签为自由形式folksonomy系统的值。这是我现在拥有的。PHP - folksonomy标签检查正则表达式

if (!preg_match('/([^-\\[email protected]\'])+/',$proposedtag)) { 
    //true, good 
    return true; 
} else { 
    //false, bad characters 
    return false; 
} 

我想允许:连字符,反斜线,正斜线,A-Z,A-Z,0-9,句,强调,在签署和单引号,并禁止所有其他人。

我敢肯定,一个否定的字符类是走在这条路上...

但是我上面的代码似乎允许其他字符(如+),我不知道为什么。 另外作为一个旁注,我不确定是否确保我不会无意中允许SQL注入。有小费吗?

回答

2

我相信这是一个逃避你的角色类中的反斜杠字符的问题。试试这个,它似乎在我喂它的测试中效果更好。注意反斜杠上的双重转义(我将其移至最后):

if (!preg_match('/([^\[email protected]\'\\\\])+/',$proposedtag)) { 
+0

这对我而言至今为止。但是我修改它为:'/([^\-\/a-zA-Z0-9\[email protected]\'\\\\])+/'以包含正斜杠。 – jjclarkson 2009-08-07 23:31:20

+0

我打了复选标记之前会运行一些测试;) – jjclarkson 2009-08-07 23:32:22