乐趣区

关于php:不使用正则进行英文数字等相关字符的规则校验

在一些场景中,比如说注册登录的时候,咱们会对用户名做一些限度,比方只能是数字和字母的组合。个别状况下,咱们会应用正则表达式来实现这样的性能,不过,PHP 其实曾经帮咱们筹备发了几个函数来解决这样的状况。

ctype_ 相干函数

// 数字和字母,不蕴含浮点数,[A-Za-z0-9]
if(ctype_alnum($input)){echo $input, '是英文数字的组合字符!', PHP_EOL;}

// 英文字母,[A-Za-z]
if(ctype_alpha($input)){echo $input, '是英文字母!', PHP_EOL;}

// 数字字符,不蕴含浮点数、正数(无符号正整数)if(ctype_digit($input)){echo $input, '是数字字符!', PHP_EOL;}

下面三个函数别离分就的就是数字 + 字母、纯字母、纯数字的三种字符类型的判断。没错,对于这种判断咱们应用的正是 ctype_ 结尾的这些函数。在这其中,惟一须要留神的是 ctype_digit() 进行数字判断时,返回 true 的状况只能是无符号、无小数点的正整数,也就是说正数和小数也是无奈通过这个函数的判断的。咱们在文章的最初还会看一下 ctype_digit() 和 is_numeric() 有什么区别。

当然,ctype_ 相干的函数不止这三个,还有很多,咱们再来看一组。

// 小写字母
if(ctype_lower($input)){echo $input, '是小写字母字符!', PHP_EOL;}

// 大写字母
if(ctype_upper($input)){echo $input, '是大写字母字符!', PHP_EOL;}

// 所有可打印字符
if(ctype_print($input)){echo $input, '是可打印字符!', PHP_EOL;}

// 所有字符都是可见的,除了空格或者格局管制这些不可见的
if(ctype_graph($input)){echo $input, '是可打印字符,除空白字符!', PHP_EOL;}

// 不蕴含空白、字母、数字的可打印字符 英文标点符号类
if(ctype_punct($input)){echo $input, '是不蕴含空白、字母、数字的可打印字符!', PHP_EOL;}

ctype_lower() 和 ctype_upper() 是判断字符串中的内容是否全都为小写或大写。记住,满足条件的状况是字符串中所有的内容都必须为大写或小写,有一个字母不是的话那就无奈返回 true。当然,这两个判断外面也都必须是英文字母,不能有数字、空格之类的内容。

ctype_print() 是判断是否是可打印内容。什么是可打印内容呢?就是 echo、print 之类的可能输入并且你能在屏幕上看到的内容。

ctype_graph() 是除了空白字符之外的可打印字符。什么叫空白字符呢?\n、\t 这一类的制表符号,还有咱们失常的空格都是空白字符。

ctype_punct() 能够简略的了解为就是标点符号,整个字符串都是标点符号组成的,并且不蕴含空白内容。

// \n \t \r 之类
if(ctype_cntrl($input)){echo $input, '是格局控制字符!', PHP_EOL;}

// 空格
if(ctype_space($input)){echo $input, '是空格字符!', PHP_EOL;}

// 16 进制 AB10BC99
if(ctype_xdigit($input)){echo $input, '是十六进制字符!', PHP_EOL;}

貌似制表符不是很受欢迎呀,不必怕,ctype_cntrl() 就是专门判断整个字符是不是由这些制表符组成的。

ctype_space() 从名字就能够看出,是不是由空格组成的字符串。

ctype_xdigit() 是咱们最初一个 ctype_ 函数,从名字其实也可能看进去,它是判断是否是 16 进制字符串的。

ctype_digit() 与 is_numeric() 的区别

这两个函数都是判断参数是否为数字的,然而它们有一个很大的区别就是 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_ 函数,是不反对中文的,它们仅反对英文、数字、英文符号这一类的判断。

测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202003/source/%E4%B8%8D%E4%BD%BF%E7%94%A8%E6%AD%A3%E5%88%99%E8%BF%9B%E8%A1%8C%E8%8B%B1%E6%96%87%E6%95%B0%E5%AD%97%E7%AD%89%E7%9B%B8%E5%85%B3%E5%AD%97%E7%AC%A6%E7%9A%84%E8%A7%84%E5%88%99%E6%A0%A1%E9%AA%8C.php

参考文档:
https://www.php.net/manual/zh/ref.ctype.php

===========

各自媒体平台均可搜寻【硬核项目经理】

退出移动版