[英]Can't use certain characters in a 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");
那是最初的一段代碼。 一位朋友將其更改為最上面的部分,它將允許使用 az 和 0-9,但不允許使用我需要的其他字符。 誰能幫我?
提前致謝。
您的正則表達式使用 PCRE 語法,因此您必須使用 preg_match() 而不是 eregi()。
試試這個代碼:
else if (!preg_match("/^([0-9a-z_\[\]* -])+$/i", $subuser)) {
$form->setError($field, "* Username not alphanumeric");
}
對於括號表達式:
要在列表中包含文字]
,請將其設為第一個字符(在可能的^
)。 要包含文字-
,請將其作為范圍的第一個或最后一個字符,或第二個端點。 要使用文字-
作為范圍的第一個端點,請將其括在[.
和.]
使其成為整理元素(見下文)。 除了這些和一些使用[
組合(見下一段),所有其他特殊字符,包括\\
,在括號表達式中失去它們的特殊意義。
所以這應該做你想做的:
"^([]0-9a-z_[* -])+$"
不要使用 ereg 函數系列 - 它們速度較慢,如果我沒記錯的話,最終會被棄用。
這應該解決它
if ( preg_match( "/^[^0-9a-z_\[\]* -]$/i", $subuser )
{
$form->setError( $field, "* Username not alphanumeric" );
}
即使使用 preg_* 函數,模式也需要用非字母分隔符包裝:
"~^([0-9a-z_[]*- ])+$~"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.