print_r(strlen(trim(' ')));
结果是9
我也试过
preg_replace('/[\n\r\t\s]/', '', ' ')
但结果不是零。
请下载我的代码,您将获得结果
答案 0 :(得分:12)
mb_language('uni');
mb_internal_encoding('UTF-8');
$s = ' ';
if (strlen(preg_replace('/\s+/u','',$s)) == 0) {
echo "String is empty.\n";
}
如果这不起作用我建议这样做
$s = ' ';
if (strlen(trim(preg_replace('/\xc2\xa0/',' ',$s))) == 0) {
echo "String is empty.\n";
}
这些解决方案已在不同平台上进行了测试。
u flag告诉preg_replace()将字符串视为多字节字符串,即utf-8
该角色是一个不间断的空间C2A0,可以使用alt + 0160生成。
答案 1 :(得分:3)
也许你正在做一些搞乱结果的事情?你的测试确实返回0
print_r(strlen(trim(' ')));
这就是trim的预期行为。
此函数返回一个字符串 空白从一开始就被剥夺了 和结束没有第二个 参数,trim()将剥离这些 字符:
- “”(ASCII 32(0x20)),一个普通的空间。
- “\ t”(ASCII 9(0x09)),一个标签。
- “\ n”(ASCII 10(0x0A)),新行(换行符)。
- “\ r”(ASCII 13(0x0D)),回车。
- “\ 0”(ASCII 0(0x00)),NUL字节。
- “\ x0B”(ASCII 11(0x0B)),垂直制表符。
<强>更新强>
查看附加的代码,我注意到你在2个空格之间有一个额外的字符。
这是 hexdump -C
的输出$ hexdump -C space.php
00000000 3c 3f 0d 0a 70 72 69 6e 74 5f 72 28 73 74 72 6c |<?..print_r(strl|
00000010 65 6e 28 74 72 69 6d 28 27 20 c2 a0 20 27 29 29 |en(trim(' .. '))|
00000020 29 3b 0d 0a 3f 3e |);..?>|
00000026
这是 od 的输出,只有文件中的那个字符。
$ od space.php
0000000 120302
0000002
trim不会删除该空间,因为..好吧,它不是空格。 This is a good reference关于如何发现不寻常的角色。
哦,要回答你的更新问题,请按照彼得所说的那样使用empty。
答案 2 :(得分:2)
我认为最快的方法是修剪前导空格(如果有其他字符,ltrim
将快速失败)并将结果与空字符串进行比较:
# Check if string consists of only spaces
if (ltrim($string, ' ') === '') {
答案 3 :(得分:2)
一个简单的preg_match()就足够了:
if(preg_match('/^\s+$/', $str)) == 1){
die('there are only spaces!');
}
答案 4 :(得分:0)
答案 5 :(得分:0)
您想知道字符串是否包含空格吗?
if(strpos($string, ' ') !== false) echo $string.' contains a space';
答案 6 :(得分:0)
this ......
怎么样?$str = preg_replace('/\s\s+/', '', $str);
或者这......
$str = str_replace(array("\n", "\r", "\t", " ", "\o", "\xOB"), '', $str);
答案 7 :(得分:0)
if(strlen(trim($_POST['foobar'])) == 0){
die('the user didn\'t input anything!');
}
empty
也会成功
像
$bar = trim($_POST['foobar']);
if(empty($bar)){
die('the user didn\'t input anything!');
}
答案 8 :(得分:0)
如果 trim($ var) 不起作用,则$ var可能不是字符串。 所以先投入字符串
$ var1 = string($ var) 然后 的 修剪($ VAR1) 强>