开发者

How to check if there are only spaces in string in PHP?

开发者 https://www.devze.com 2022-12-11 23:44 出处:网络
pri开发者_C百科nt_r(strlen(trim(\'\'))); the result is 9 I also tried preg_replace(\'/[\\n\\r\\t\\s]/\', \'\', \'\')
pri开发者_C百科nt_r(strlen(trim('     ')));

the result is 9

I also tried

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

but the result is not zero.

Please download my code and you will get the result

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


mb_language('uni');
mb_internal_encoding('UTF-8');

$s = '     ';
if (strlen(preg_replace('/\s+/u','',$s)) == 0) {
    echo "String is empty.\n";
}

If that doesn't work i suggest doing this

$s = '     ';
if (strlen(trim(preg_replace('/\xc2\xa0/',' ',$s))) == 0) {
    echo "String is empty.\n";
}

These solutions have been tested on different platforms.

The u flag tells preg_replace() to treat the string as a multibyte string, namely utf-8

The character is a nonbreaking space C2A0 and can be generated with alt+0160.


I think the fastest way is to trim leading spaces (ltrim will fail fast if there are other characters) and compare the result to the empty string:

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


Maybe you are doing something else that is messing up the results? Your test do returns 0

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

And that's the expected behavior of trim.

This function returns a string with whitespace stripped from the beginning and end of str . Without the second parameter, trim() will strip these characters:

  • " " (ASCII 32 (0x20)), an ordinary space.
  • "\t" (ASCII 9 (0x09)), a tab.
  • "\n" (ASCII 10 (0x0A)), a new line (line feed).
  • "\r" (ASCII 13 (0x0D)), a carriage return.
  • "\0" (ASCII 0 (0x00)), the NUL-byte.
  • "\x0B" (ASCII 11 (0x0B)), a vertical tab.

UPDATE:

Looking at your attached code i noticed you have an extra character between 2 spaces.

This is the output of 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

And this is the output of od, with just that character in the file.

$ od space.php 
0000000    120302                                                        
0000002

trim won't delete that space, because.. well, it's not a space. This is a good reference on how to spot unusual characters.

Oh, and to answer your updated question, just use empty as Peter said.


A simple preg_match() would suffice:

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


You could use the count_chars function or the substr_count function.


You want to know if a string contains a space?

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


How about this...

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

Or this...

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


if(strlen(trim($_POST['foobar'])) == 0){
 die('the user didn\'t input anything!');
}

empty would also make it

like

$bar = trim($_POST['foobar']);
if(empty($bar)){
 die('the user didn\'t input anything!');
}


if trim($var) is not working then $var may be not a string. so first cast into string

$var1 = string($var) and then trim($var1).

0

精彩评论

暂无评论...
验证码 换一张
取 消