簡體   English   中英

不能在正則表達式中使用某些字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM