一些不常用的PHP字符类型检测函数

原文链接:何晓东 博客

主要是 Ctype 扩展所提供的函数,用来检测在当前的区域设定下,一个字符或者字符串,是否仅包含指定类型的字符。此类函数用来替代简单的正则验证,效率高于正则验证。参数为字符串,如果给出一个 -128 到 255 之间(含)的 int, 将会被解释为该值对应的 ASCII 字符 (负值将加上 256 以支持扩展 ASCII 字符). 其它整数将会被解释为该值对应的十进制字符串。

Ctype 系列函数
  • ctype_alnum — 做字母和数字字符检测,仅包含 [A-Za-z0-9] 返回 true
  • ctype_alpha — 做纯字符检测,仅包含 [A-Za-z] 返回 true
  • ctype_cntrl — 做控制字符检测,\r \t \n 为控制字符,仅包含控制字符才返回 true
  • ctype_digit — 做纯数字检测,请看下面额外说明
  • ctype_graph — 做可打印字符串检测,空格除外,测试显示包含 \r \t \n 会返回 false,'asdf ' 同样会返回 false
  • ctype_lower — 做小写字符检测
  • ctype_print — 做可打印字符检测 'asdf ' 字符串会返回 true
  • ctype_punct — 检测可打印的字符是不是不包含空白、数字和字母,其实就是全都是标点符号才返回 true,其他返回 false
  • ctype_space — 做空白字符检测,必须全为 ' ' 空字符串才返回 true,其他返回 false
  • ctype_upper — 做大写字母检测
  • ctype_xdigit — 检测字符串是否只包含十六进制字符,即只能包含十进制的树枝和 [A-Fa-f] 的字母,否则返回 false
ctype_digit 额外说明:

这个函数的参数要求是一个 string 这一点是非常有用的,因此当你传入一个 integer 的参数也许不能得到期望的结果。

$strings = array('1820.20', '10002', 'wsl!12');
foreach ($strings as $testcase) {
    if (ctype_digit($testcase)) {
        echo "The string $testcase consists of all digits.\n";
    } else {
        echo "The string $testcase does not consist of all digits.\n";
    }
}

// The string 1820.20 does not consist of all digits.
// The string 10002 consists of all digits.
// The string wsl!12 does not consist of all digits.

第二个示例:直接传入整型数字被转成 ASCII 码处理了

$numeric_string = '42';
$integer        = 42;

ctype_digit($numeric_string);  // true
ctype_digit($integer);         // false (ASCII 42 是 * 字符)

is_numeric($numeric_string);   // true
is_numeric($integer);          // true

ctype_digit(255)               // false
ctype_digit(256)               // true

参考链接:PHP 字符类型检测

最后恰饭 阿里云全系列产品/短信包特惠购买 中小企业上云最佳选择 阿里云内部优惠券


滑稽点
一些 PHP 相关知识的综合性专栏。
1.7k 声望
443 粉丝
0 条评论
推荐阅读
MySQL distinct 和 order by 排序混淆的替代方案
如果列为 a 的数据有很多条,就会发现最终取到的那条数据可能不是 updated_at 最近的那条数据,因为 distinct 有一次默认的排序,然后生成一个临时表,然后 order by 无法从最开始的原始数据中进行排序,仅排序中...

hxd_阅读 620

怎样用 PHP 来实现枚举?
在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见,...

唯一丶25阅读 6.3k评论 4

Git操作不规范,战友提刀来相见!
年终奖都没了,还要扣我绩效,门都没有,哈哈。这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。问题描述小A和我在同时开发一个功能模块,他在优化之前的代码逻辑,我在开...

王中阳Go5阅读 1.9k评论 2

封面图
微信公众号开发:自动回复文本/图片/图文消息/关键词回复/上传素材/自定义菜单
对接流程1、申请微信公众号测试账号URL:[链接]2、登录,配置开发者服务器URL和Token开发者服务器配置代码:config.php {代码...} URL是config.php在你服务器的URLToken是上面代码自己设置的Token搞定之后,就能完...

TANKING2阅读 10k

Hyperf 3.0 发布,PHP 新时代
在过去的一年半时间里,Hyperf 2.2 共发布了 35 个小版本,使 Hyperf 达到了一个前所未有的高度,这里也获得了一些不错的数据反馈。

huangzhhui3阅读 1.1k

封面图
多个著名 Go 开源项目被放弃,做大开源不能用爱发电,更不能只靠自己!
大家好,我是煎鱼。相信关注我的许多同学都有接触 Go 语言的开发,甚至在企业中多有实践。那么你在日常开发中,势必会接触到 gorilla 组织下的各个 Go 开源项目。如下图:gorilla/mux:Star:17.9k。a powerful r...

煎鱼1阅读 2.3k

Go for 循环有时候真的很坑。。。
大家好,我是煎鱼。不知道有多少 Go 的面试题和泄露,都和 for 循环有关。今天我在周末认真一看,发现了 redefining for loop variable semantics 。著名的硬核大佬 Russ Cox 表示他一直在研究这个问题,并表示十...

煎鱼阅读 3.4k

1.7k 声望
443 粉丝
宣传栏