PHP字符串处理的思考与记录

判断字符串是否为空

判断字符串为不为空,不能使用empty,因为empty会认为’0’也是空的

$s = '0';
if(empty($s)) {
    var_dump('s为空');
} else {
    var_dump('s不为空');
}

输出

"s为空"

‘0’ 显然是不为空的,所以使用empty判断字符串是否为空就是个陷阱!

后面改进为,方法一:

if(!isset($s) || $s === '') {
    var_dump('s为空');
} else {
    var_dump('s不为空');
}

输出

$s = array();  //输出:"s不为空"
$s = 0;        //输出:"s不为空"
$s = '0';      //输出:"s不为空"
$s = '';       //输出:"s为空"
$s = null;     //输出:"s为空"
$s = NULL;     //输出:"s为空"
$s = 'null';   //输出:"s不为空"

数组和数字也被判定成不为空了。

不过既然是弱类型语言,到时候这些也可以转为字符串格式来使用,所以关系不大。

但是在特殊情况下,需要更严格的检查方案,则需要再改进下:

方法二:

if(!isset($s) || !is_string($s) || strlen($s) == 0) {
    var_dump('s为空');
} else {
    var_dump('s不为空');
}

先判断有没有赋值,然后判断是不是字符串,最后判断字符串长度是不是为0,有了三重保险,输出:

$s = array();  //输出:"s为空"
$s = 0;        //输出:"s为空"
$s = '0';      //输出:"s不为空"
$s = '';       //输出:"s为空"
$s = null;     //输出:"s为空"
$s = NULL;     //输出:"s为空"
$s = 'null';   //输出:"s不为空"

这样把非字符串类型也排除在外了。

使用什么方法判定字符串为不为空要根据具体需求,如果对类型不那么严格,用方法一;如果只允许字符串,使用方法二。

判断字符串是不是全是空格

$is_space = ctype_space($text);

如果全是空格,返回true;如果不是,返回false。

将字符串以空格分割为数组

$test_array = explode(' ', $test_string);

如果使用上面的方式,那就太单纯了,假如字符串包含多个空格怎么办?

需要使用以下方法:

$test_array = preg_split('#\s+#', $test_string);

将16进制字符串转换为10进制

$a = '0x000000010184f2fc';
// 方法一
$b = intval($a, 16);
var_dump($b); // 输出: 4320457468
// 方法二
$c = base_convert($a, 16, 10);
var_dump($c); // 输出: 4320457468

intval()函数可以将字符串转为10进制整数
参数一为要转换的数字(字符串类型)
参数二是可选参数,用来指定基底,默认是10
也就是说,字符串为‘0x’开头,是16进制格式,参数二要指定为16
字符串为‘0’开头,是8进制格式,参数二要指定为8
返回值为10进制整数;如果不能识别该字符串,则返回0

base_convert()函数也可以用来转换进制,只不过返回的还是字符串类型的数字
参数一为要转换的数字(字符串类型)
参数二为当前的进制
参数三为要转换的进制
返回值为相应进制的数字(字符串类型);如果字符串不能识别,则返回‘0’。

判断一个字符串是否都是空格

方法一,使用正则表达式判断:

$test = "   \t   ";
$pattern = '/^(\s+)$/';
$is_match = preg_match($pattern, $test);
if ($is_match) {
    var_dump('都是空格');
} else {
    var_dump('不都是空格');
}
// 输出:都是空格

‘\t’ 制表符也是空格。

方法二,使用ctype_space()函数:

$test = "   \t   ";
$is_match = ctype_space($test);
if ($is_match) {
    var_dump('都是空格');
} else {
    var_dump('不都是空格');
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值