Прежде всего, люди постоянно запутываются в этом движении ...
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