如何检查PHP中的字符串中是否只有空格?

时间:2009-11-18 08:17:46

标签: php string utf-8

print_r(strlen(trim('     ')));

结果是9

我也试过

preg_replace('/[\n\r\t\s]/', '', '   ')

但结果不是零。

请下载我的代码,您将获得结果

http://blog.eood.cn/attachment.php?id=70

9 个答案:

答案 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)