Nasıl PHP dize yalnızca boşluk olup olmadığını kontrol etmek?

8 Cevap php
print_r(strlen(trim('     ')));

Sonuç 9'dur

Ayrıca güvenilir

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

ancak sonuç sıfır değildir.

Please download my code and you will get the result

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

8 Cevap

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

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

Bu işe yaramazsa ben bu yapıyor öneririz

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

Bu çözümler, farklı platformlarda test edilmiştir.

U flag bir Çokbaytlı dize olarak dize tedavi etmek için) (preg_replace söyler, yani utf-8

Karakter bölünemez boşluk C2A0 ve alt 0160 ile oluşturulabilir.

Belki sonuçlarını karıştırıyor başka bir şey yapıyorsun? Test döner yapmak 0

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

Ve bu trim beklenen davranış.

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)), sıradan bir alan.
  • "\ T" (ASCII 9 (0x09)), bir sekme.
  • "\ N" (ASCII 10 (0x0A)), yeni bir satır (satır besleme).
  • "\ R" (ASCII 13 (0x0D)), bir satırbaşı.
  • "\ 0" (ASCII 0 (0x00)), NUL bayt.
  • "\ X0B" (ASCII 11 (0x0B)), dikey sekme.

UPDATE:

Lütfen ekli koduna bakarak i 2 uzaylar arasında bir karakter fazladan fark ettim.

Bu hexdump -C çıkışı olan

$ 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

Ve bu dosyada sadece bir karakter ile, od çıkışıdır.

$ od space.php 
0000000    120302                                                        
0000002

iyi, bir boşluk değil .. çünkü Döşeme, o boşluğu silmez. This is a good reference sıradışı karakterleri noktaya nasıl.

Dedi Peter gibi Oh, ve güncellenmiş soruyu cevaplamak için, sadece empty kullanın.

Basit preg_match () yeterli olacaktır:

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

Bir dize boşluk varsa bilmek istiyorum?

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

Peki this ...

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

Ya da bu ...

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