我有這個PHP正則表達式:正則表達式的字母數字
$username = preg_replace('/[^a-z0-9]/i', '', $username);
它只允許A-Z
和0-9
。我怎樣才能允許.
,-
和_
?
我有這個PHP正則表達式:正則表達式的字母數字
$username = preg_replace('/[^a-z0-9]/i', '', $username);
它只允許A-Z
和0-9
。我怎樣才能允許.
,-
和_
?
$username = preg_replace('/[^a-z0-9._-]/i', '', $username);
移除任何不在組中的字符的([^]
)之一。注意hypern是那裏的最後一個,所以它失去了它的特殊含義。
我一直認爲連字符只是在字母或數字之間的意思,'$ username = preg_replace('/[^_-.]/ i','',$ username);'do? – 2010-03-01 09:41:12
它會介意**'_'和'.'之間的字符**,這很奇怪。 – Kobi 2010-03-01 09:42:14
有趣 - 大概所有字符的小數值在95('_')和46('.')之間?不知道這是否等同於'.- _'。 – 2010-03-01 09:43:53
如果你確切地知道你需要匹配什麼,只需在一個字符組中指定它即可。破折號或者需要在開始或結束。
/[A-Z0-9._-]/
在被刪除的答案中,你說逃脫DOT會導致反斜槓也被匹配,這是不正確的。嘗試一下:'preg_match_all('/[\.]/','。\\',$ matches); print_r($ matches);'添加一個反斜槓什麼也不做,它只會匹配字符類中的文字DOT。 – 2010-03-01 09:45:09
由於preg_replace()正在被使用,他們需要否定這一點。 – jasonbar 2010-03-01 09:49:44
$username = preg_replace('/[^a-z0-9._-]/i', '', $username);
您當前的代碼實際上確實允許雙方A-Z
和a-z
- 在i
標誌,標誌着你的正則表達式不區分大小寫。
您可以使用以下正則表達式:
/[^a-z0-9._-]/i
/[^a-zA-Z0-9._-]/
/[^a-z0-9.\-_]/
我們在哪裏 逃避連字符$username = preg_replace('/[^a-z0-9._-]/i', '', $username);
嘗試
$username = preg_replace('/[^a-z0-9.-_]/i', '', $username);
您需要將最後一個連字符轉義爲:。\ -_ – codaddict 2010-03-02 03:10:20
非常容易,只要這些字符添加到正則表達式以及
$username = preg_replace('/[^a-zA-Z0-9._-]/','',$username)
的。因爲它的'matchall'特性,它最終會因爲否則會被用來定義一個範圍(我們當然可以逃脫它)而需要逃脫。
'.'不需要在字符組內部轉義。 – 2010-03-01 09:41:59
我不知道,謝謝。 – 2010-03-01 10:36:16
你可能會發現http://www.regular-expressions.info/index.html有用。 – jasonbar 2010-03-01 09:48:41
我真的建議你閱讀一些正則表達式的介紹。這裏有很多教程,例如一個jasonbar鏈接到。不要誤會我的意思,你可以在這裏提問,這很好,但是你應該先嚐試自己解決問題。 – 2010-03-01 09:55:28