[英]Regular Expression - Small change needed
我需要一個僅允許a到z和0到9的正則表達式。我在此站點遇到了下面的函數,但是它允許通過(#.-)幾個符號。 如果必須只允許a到z(大寫和小寫)和0到9,該怎么辦? 我不敢編輯它,因為我對正則表達式一無所知。
這個正則表達式也可以很好地檢查a到z和0到9,或者有什么方法可以改善它。
function isValid($str) {
return !preg_match('/[^A-Za-z0-9.#\\-$]/', $str);
}
謝謝
在這種情況下,您似乎需要以下內容:
function isValid($str) {
return !preg_match('/[^A-Za-z0-9]/', $str);
}
[…]
regex構造稱為字符類 。 像[aeiou]
類的東西與任何一個元音匹配。
[^…]
是一個否定的字符類,因此[^aeiou]
匹配除元音(包括輔音,數字,符號等)之外的任何其他字符。
-
取決於范圍在字符類定義中的出現方式,是范圍定義 ,因此0-9
與0123456789
相同。
因此,正則表達式[^A-Za-z0-9]
實際上與既不是字母也不是數字的字符匹配。 這就是為什么preg_match
的結果與!
取反的原因!
。
也就是說,上述方法的邏輯使用雙重否定 :
isValid = it's not the case that
there's something other than a letter or a digit
anywhere in the string
您也可以擺脫雙重否定,並使用類似以下的方法:
function isValid($str) {
return preg_match('/^[A-Za-z0-9]*$/', $str);
}
現在沒有任何否定。 ^
和$
是字符串錨點的開始和結尾, *
是零或一個重復的元字符。 現在的邏輯很簡單:
isValid = the entire string from beginning to end
is a sequence of letters and digits
一些語言具有標准功能/慣用方式來驗證字符串僅由字母數字字符(以及其他可能的字符串“類型”)組成。
例如,在PHP中,可以使用ctype_alnum
。
bool ctype_alnum ( string $text )
檢查提供的字符串
text
中的所有字符是否都是字母數字。
ctype
功能
ctype_alpha
, digit
, lower
, upper
, space
等 盡管我對正則表達式一無所知,但使用這樣一個簡單的模式,您可能應該考慮使用
if(ctype_alnum($input)) {
您可以將[Zz0-9]
和z和0-9匹配,並且可以將[a-z0-9]
與z和0-9匹配。 如果要同時使用大寫和小寫,則可以使用[A-Za-z0-9]
。
有關更多信息,請參見正則表達式字符類 。
此外, !preg_match()
並不是必需的。 相反,您可以根據需要使用正匹配,例如return preg_match('/^[A-Za-z0-9]+$/', $str);
您擁有的實際上是一個否定的字符類,因此它將禁止方括號內的任何內容。 不過,我可能會誤解您的目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.