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,但它不允许我需要的其他角色。任何人都可以帮助我吗?
提前致谢。
答案 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 _ [] * - ])+ $〜”