不使用正則進行英文數字等相關字元的規則校驗

2021-10-07 23:06:26 字數 2358 閱讀 4237

在一些場景中,比如說註冊登入的時候,我們會對使用者名稱做一些限制,比如只能是數字和字母的組合。一般情況下,我們會使用正規表示式來完成這樣的功能,不過,php其實已經幫我們準備發了幾個函式來處理這樣的情況。

// 數字和字母,不包含浮點數, [a-za-z0-9]

if(ctype_alnum($input))

// 英文本母, [a-za-z]

if(ctype_alpha($input))

// 數字字元,不包含浮點數、負數(無符號正整數)

if(ctype_digit($input))

上面三個函式分別分就的就是數字+字母、純字母、純數字的三種字元型別的判斷。沒錯,關於這種判斷我們使用的正是 ctype_ 開頭的這些函式。在這其中,唯一需要注意的是 ctype_digit() 進行數字判斷時,返回 true 的情況只能是無符號、無小數點的正整數,也就是說負數和小數也是無法通過這個函式的判斷的。我們在文章的最後還會看一下 ctype_digit() 和 is_numeric() 有什麼區別。

當然,ctype_ 相關的函式不止這三個,還有很多,我們再來看一組。

// 小寫字母

if(ctype_lower($input))

// 大寫字母

if(ctype_upper($input))

// 所有可列印字元

if(ctype_print($input))

// 所有字元都是可見的,除了空格或者格式控制這些不可見的

if(ctype_graph($input))

// 不包含空白、字母、數字的可列印字元 英文標點符號類

if(ctype_punct($input))

ctype_lower() 和 ctype_upper() 是判斷字串中的內容是否全都為小寫或大寫。記住,滿足條件的情況是字串中所有的內容都必須為大寫或小寫,有乙個字母不是的話那就無法返回 true 。當然,這兩個判斷裡面也都必須是英文本母,不能有數字、空格之類的內容。

ctype_print() 是判斷是否是可列印內容。什麼是可列印內容呢?就是 echo 、 print 之類的能夠輸出並且你能在螢幕上看到的內容。

ctype_graph() 是除了空白字元之外的可列印字元。什麼叫空白字元呢?\n、\t這一類的製表符號,還有我們正常的空格都是空白字元。

ctype_punct() 可以簡單的理解為就是標點符號,整個字串都是標點符號組成的,並且不包含空白內容。

// \n \t \r 之類

if(ctype_cntrl($input))

// 空格

if(ctype_space($input))

// 16進製制 ab10bc99

if(ctype_xdigit($input))

貌似製表符不是很受歡迎呀,不用怕,ctype_cntrl() 就是專門判斷整個字元是不是由這些製表符組成的。

ctype_space() 從名字就可以看出,是不是由空格組成的字串。

ctype_xdigit() 是我們最後乙個 ctype_ 函式,從名字其實也能夠看出來,它是判斷是否是16進製制字串的。

這兩個函式都是判斷引數是否為數字的,但是它們有乙個很大的區別就是 ctype_digit() 僅針對字串。也就是說它是用來判斷字串中的內容是否是數字的,如果直接給它乙個普通的數字型別,那麼它還是會返回 false 的,它會認為這個數字型別的內容不是乙個「字串」型別的數字。

// ctype_digit 與 is_numeric 的區別

$numeric_string = '42';

$integer        = 42;

echo ctype_digit($numeric_string), php_eol;  // true

echo ctype_digit($integer), php_eol;         // false (ascii 42 is the * character)

echo is_numeric($numeric_string), php_eol;   // true

echo is_numeric($integer), php_eol;          // true

是不是一組很方便的函式。不過其實現在使用正則也很方便,而且正則的組合形式更加多樣,我們的可控制範圍更大,所以正則還是在這種情況下的首選。當然,越靈活也越有可能出錯,正則中如果漏寫一點內容又沒有詳盡的測試的話,也有可能造成嚴重的後果。因此,在日常工作中,具體的取捨還是要看我們自身,這裡也只是為大家作個科普介紹,使用何種方式的決定權還是掌握在我們自己手上。

另外需要說明的是,這一組 ctype_ 函式,是不支援中文的,它們僅支援英文、數字、英文符號這一類的判斷。

測試**:

正則限制input框只能輸入數字,英文等

常用html正規表示式 1.只能輸入數字和英文的 2.只能輸入數字的 3.只能輸入全形的 4.只能輸入漢字的 5.郵件位址驗證 var regu 0 9a za z 0 9a za z 0 9a za z 0 9a za z a za z0 9 a za z net net com com gov ...

不使用庫函式進行回文數字判斷

不使用庫函式,判斷回文數字。其實最核心的就是如何將乙個正整型數字轉成陣列,我們可以使用數學的取模 和數學的整除 將數字的各個位數取出,逐一放入目標陣列中即可。public class reversenumber else 將目標輸入的整數,不經過庫函式,轉成反序的陣列a。input int orig...

python正則匹配中文 英文 數字 其它字元

一些字串既包含中文 也包含英文 數字等,需要對這類字串做提取,單個中文字元 英文單詞以及數字表達等。需要採用正則匹配的方式來做 比如對於如下針對資料的描述 android ios 2條裝 0.25公尺 1公尺 土豪金拆分後想要得到 android ios 2 條 裝 0.25 公尺 1 公尺 土 豪...