不能在正则表达式中使用某些字符

时间:2008-10-27 23:02:45

标签: php regex

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 :(得分:7)

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

请尝试使用此代码:

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

答案 1 :(得分:4)

对于括号表达式,

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

所以这应该做你想要的:

“^([] 0-9a-z _ [* - ])+ $”

答案 2 :(得分:3)

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

这应该解决它

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

答案 3 :(得分:1)

即使使用preg_ *函数,模式也需要包含在非孤立分隔符中:

“〜^([0-9a-z _ [] * - ])+ $〜”