Как проверить, если "" существует? - PullRequest
0 голосов
/ 01 июля 2018

Когда я печатаю переменную, я получаю пустой результат, и когда я проверяю элемент, я вижу, что  .

Я попытался проверить, являются ли переменные пустыми или равными этому значению:

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

Но код внутри этого условия не выполняется.

Когда я var_dump($string), я получаю:

string(2) " "

Что я должен сделать, чтобы проверить, равна ли переменная или содержит ее?

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Прежде всего, люди постоянно запутываются в этом движении ...

strpos($string, " ")

Если   находится в начале вашей строки, то оценочный результат равен 0 ("позиция смещения") И 0 по сравнению с false в том смысле, как вы создали свое условное выражение .

Вам необходимо явно проверить false (строгая проверка) из strpos() следующим образом:

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

0 голосов
/ 01 июля 2018

Решение, если используется utf-8:

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

Если ASCII:

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

Тогда $ a теперь пусто, и вы можете проверить его, используя if(empty($a))

Ответ существует здесь: Заменяет ли html_entity_decode & nbsp; также? Если не как его заменить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...