簡體   English   中英

正則表達式-需要少量更改

[英]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-90123456789相同。

因此,正則表達式[^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中的所有字符是否都是字母數字。

API鏈接

  • PHP ctype函數 -的整個家庭的名單ctype功能
    • ctype_alphadigitlowerupperspace

盡管我對正則表達式一無所知,但使用這樣一個簡單的模式,您可能應該考慮使用

if(ctype_alnum($input)) {

http://uk3.php.net/manual/en/function.ctype-alnum.php

您可以將[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.

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