判断字符串为不为空,不能使用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);
$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('不都是空格');
}