2009-11-18 65 views
5
print_r(strlen(trim('  '))); 

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

我也试过

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

但结果不是零。

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

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

+3

你的两次尝试甚至没有意义,也没有你的结果。修剪第一个字符串应该产生一个空字符串(长度为0)。 preg_replace用于替换字符串,而不检查它们是否存在。 – mpen 2009-11-18 08:22:19

+0

对于标题中的错误感到抱歉。 – 2009-11-18 08:24:02

+2

@Bruce:在我的安装中:'print_r(strlen(trim('')));'= 0想知道如何得到9! – RageZ 2009-11-18 08:24:58

回答

11
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来生成。

+0

你可以下载我的代码,并检查*空间*,我认为这不是正常的空间。 – 2009-11-18 08:43:48

+1

请注意'empty'也为''0''返回* true *。 – Gumbo 2009-11-18 08:47:10

+0

请下载我的代码 – 2009-11-18 08:52:58

0

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

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

如何this ...

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

或者这...

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

结果是2,而不是零 – 2009-11-18 08:28:39

2

我认为,最快的方法就是修剪领先的空间(如果有其它字符ltrim将失败快)和比较的结果为空字符串:

# Check if string consists of only spaces 
if (ltrim($string, ' ') === '') { 
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!'); 
} 
+0

我无法得到空的声明运行,那有什么关系? – 2009-11-18 08:36:01

+2

啊,你必须在使用空之前将修剪过的字符串赋给变量。 – 2009-11-18 08:38:03

+0

@彼得:好点! – RageZ 2009-11-18 08:47:11

3

中号你是否正在做其他事情搞乱了结果?您的测试返回0

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

这就是trim的预期行为。

该函数返回 从空白开始 和STR的端部剥离的字符串。没有第二 参数,修剪()将去除这些 字符:

  • “”(ASCII 32(0×20)),一个普通的空间。
  • “\ t”(ASCII 9(0x09)),一个选项卡。
  • “\ n”(ASCII 10(0x0A)),换行(换行)。
  • “\ r”(ASCII 13(0x0D)),回车。
  • “\ 0”(ASCII 0(0x00)),NUL字节。
  • “\ x0B”(ASCII 11(0x0B)),一个垂直标签。

UPDATE:

看你的连接代码,我注意到你有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 

修剪不会删除该空间,因为..好吧,它不是空间。 This is a good reference关于如何识别不寻常的字符。

哦,为了回答您更新的问题,只需使用empty,正如Peter所说。

2

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

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

如果装饰($ VAR)没有再工作$变种可能不是一个字符串。 所以首先铸造到串

$ VAR1 =串($变种) 然后 修整(VAR1 $)