2008-10-27 27 views
1
if(!eregi("^([0-9a-z_\[\]\*\- ])+$", $subuser)) 
    $form->setError($field, "* Username not alphanumeric"); 

有人可以告诉我为什么它不允许字符,如-*不能在正则表达式中使用某些字符

if(!eregi("^([0-9a-z])+$", $subuser)) 
    $form->setError($field, "* Username not alphanumeric"); 

这是原始的一段代码。一个朋友把它改成了最上面的那个,它会允许a-z和0-9,但是它不允许我需要的其他角色。谁能帮我?

在此先感谢。

回答

4

对于括号表达式,

要在列表中包括文字“]”,将其作为第字符(以下可能的“^”)。要包含一个文字' - ',使其成为范围的第一个或最后一个字符或第二个端点。要使用文字' - '作为范围的第一个端点,请将其放在'[。'和'。]'中,使其成为整理元素(见下文)。除了这些以及使用'['(见下一段)“的一些组合之外,所有其他特殊字符(包括'\')在括号表达式中失去其特殊含义。

所以这应该做你想要什么:

“^([] 0-9A-Z _ [* - ])+ $”

7

你的正则表达式使用PCRE语法,所以你必须使用preg_match()而不是eregi()。

尝试此代码,而不是:

else if (!preg_match("/^([0-9a-z_\[\]* -])+$/i", $subuser)) { 
$form->setError($field, "* Username not alphanumeric"); 
} 
1

即使使用参看preg_ *函数的模式需要被包裹在nonalphanum分隔符:

“〜^([0-9A-Z _ [] * - ] )+ $〜“

3

不要使用ereg系列函数 - 它们更慢,如果我没记错的话,最终会被弃用。

这应该修复它

if (preg_match("/^[^0-9a-z_\[\]* -]$/i", $subuser) 
{ 
    $form->setError($field, "* Username not alphanumeric"); 
} 
+0

是的 - 他们将要在PHP6完全删除。最好避免它们。 – nickf 2008-10-27 23:43:28

相关问题