【问题标题】:How to check if there are only spaces in string in PHP?如何检查PHP中的字符串中是否只有空格?
【发布时间】:2009-11-18 08:17:45
【问题描述】:
print_r(strlen(trim('     ')));

结果是 9

我也试过了

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

但结果不为零。

请下载我的代码,你会得到结果

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

【问题讨论】:

  • 你的两次尝试甚至没有意义,你的结果也没有。修剪第一个字符串应该会产生一个空字符串(长度为 0)。 preg_replace 用于替换字符串,而不是检查它们是否存在。
  • 抱歉标题中的错误。
  • @Bruce:在我的安装中:print_r(strlen(trim(' '))); = 0 想知道你是如何得到 9 的!
  • echo strlen(trim(' ')); 打印出0
  • 我从这个页面复制了代码,结果为零。可能是空间不同。但我不知道为什么我的结果不是我的代码为零。

标签: php string utf-8


【解决方案1】:
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";
}

这些解决方案已在不同平台上进行了测试。

uflag告诉preg_replace()把字符串当作多字节字符串,即utf-8

字符是不间断空格C2A0,可以用alt+0160生成。

【讨论】:

  • 你可以下载我的代码并检查空间,我认为它不是正常空间。
  • 请注意,empty 也为 "0" 返回 true
  • 您可能需要指定内部编码。
  • 您的代码中有一个非中断空格,但 preg_replace 会将它们全部转换为常规空格,然后 trim 可以处理它。
【解决方案2】:

也许您正在做其他事情而弄乱了结果?您的测试确实返回 0

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

这是trim 的预期行为。

这个函数返回一个字符串 从一开始就去掉空格 和 str 的结尾。没有第二个 参数, 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

【讨论】:

    【解决方案3】:

    我认为最快的方法是修剪前导空格(如果有其他字符,ltrim 会很快失败)并将结果与​​空字符串进行比较:

    # Check if string consists of only spaces
    if (ltrim($string, ' ') === '') {
    

    【讨论】:

      【解决方案4】:

      一个简单的 preg_match() 就足够了:

      if(preg_match('/^\s+$/', $str)) == 1){
       die('there are only spaces!');
      }
      

      【讨论】:

        【解决方案5】:

        【讨论】:

          【解决方案6】:

          你想知道一个字符串是否包含空格?

          if(strpos($string, ' ') !== false) echo $string.' contains a space';
          

          【讨论】:

            【解决方案7】:

            this...

            $str = preg_replace('/\s\s+/', '', $str);
            

            或者这个……

            $str = str_replace(array("\n", "\r", "\t", " ", "\o", "\xOB"), '', $str);
            

            【讨论】:

              【解决方案8】:
              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!');
              }
              

              【讨论】:

              • 我无法运行空语句,这是怎么回事?
              • 啊,你必须在使用empty之前将修剪后的字符串分配给一个变量。
              • 小心 empty():empty('0') 也返回 True!
              【解决方案9】:

              如果 trim($var) 不起作用,则 $var 可能不是字符串。 所以先转换成字符串

              $var1 = string($var) 接着 trim($var1).

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2015-08-22
                • 2015-06-10
                • 1970-01-01
                • 1970-01-01
                • 2010-12-16
                • 2022-06-25
                • 2010-12-01
                相关资源
                最近更新 更多