【问题标题】:How to check if " " exist?如何检查“ ”是否存在?
【发布时间】:2018-07-01 05:52:54
【问题描述】:

当我打印一个变量时,我得到一个空白结果,当我检查元素时,我看到 

我尝试检查变量是否为空或等于该值:

ir( empty($string) || $string == " " || strpos($string, " ") || $string == " "){
    //Do Something.
}

但是那个条件里面的代码没有被执行。

当我var_dump($string) 时,我得到:

string(2) " "

我应该怎么做才能检查变量是否等于或包含它?

【问题讨论】:

  • 我建议使用 trim() 检查 null 或空字符串:(!isset($string) || trim($string) === '')
  • 什么是ir ??
  • 一定是错字:if
  • 还是不行
  • 谢谢,问题已解决

标签: php string utf-8


【解决方案1】:

首先,人们总是被这个动作绊倒......

strpos($string, " ")

如果  位于字符串的开头,则评估结果为0(“偏移位置”)并且0false 进行了松散的比较,以您制作条件表达式的方式.

您需要像这样从strpos() 显式检查false(严格检查):

if (empty($string) || strpos($string, " ") !== false || $string == " ") {
    //Do Something.
}

但是,这不是您的实际问题,因为...

当您用光标“突出显示”该字符时,可以证明您有一个多字节空间——它只有一个字符长度,但当您调用var_dump() 时,字节数为2

trim() 帮不了你。 ctype_space() 帮不了你。您需要能够识别多字节的东西。

为了实现最具包容性的匹配,我将使用一个正则表达式来搜索所有空白字符、不可见的控制字符和未使用的代码点。

if (empty($string) || preg_match("/^[\pZ\pC]+$/u", $string)) {

这将检查字符串是否真的为空或完全由一个或多个上述字符组成。

这是一个小演示:https://3v4l.org/u7eoK

(我真的不认为这是   问题,所以我将其排除在我的解决方案之外。)

向下滚动此资源:https://www.regular-expressions.info/unicode.html

【讨论】:

  • 刚刚看到答案,没有收到通知
【解决方案2】:

解决办法,如果使用utf-8:

$a = str_replace("\xC2\xA0", '', $a);

如果是 ASCII :

$a = str_replace("\xA0", '', $a);

那么 $a 现在是空的,你可以使用if(empty($a)) 来检查它

答案就在这里:Does html_entity_decode replaces   also? If not how to replace it?

【讨论】:

  • 通常empty()isset() 被调用之前 任何其他进程在变量上运行。这样做是为了避免在未声明 SUPERGLOBAL 键的情况下生成 Notices
  • 你的意思是两者都不能用来检查最后的结果,还是我错过了理解你?
猜你喜欢
  • 2014-05-14
  • 2011-08-23
  • 2012-02-29
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多