Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Функция strcasecmp() в php для сравнения строк без учета регистра

strcasecmp() в php есть как-то возможность заставить работать с кириллицей. Мне просто нужно чтобы php выводил так как прописано в базе а после mb_strtolower записи в нижнем регистре выводятся. А мне только сравнить придумывать дополнительный огромный код не хочется

По дате
По рейтингу
Аватар пользователя
Новичок
3мес

В PHP для сравнения строк без учета регистра можно использовать несколько подходов. Вот основные способы:

---

### 1. **Использование функции `strcasecmp()`**
Функция `strcasecmp()` сравнивает две строки без учета регистра. Она возвращает:
- `0`, если строки равны;
- отрицательное число, если первая строка "меньше" второй;
- положительное число, если первая строка "больше" второй.

Пример:
```php
$string1 = "hello";
$string2 = "HELLO";

if (strcasecmp($string1, $string2) === 0) {
echo "Строки равны без учета регистра.";
} else {
echo "Строки не равны.";
}
```

---

### 2. **Использование функции `stristr()`**
Функция `stristr()` выполняет поиск подстроки в строке без учета регистра. Если подстрока найдена, она возвращает часть строки, начиная с первого вхождения подстроки. Если подстрока не найдена, возвращается `false`.

Пример:
```php
$string = "Hello World";
$search = "hello";

if (stristr($string, $search)) {
echo "Подстрока найдена без учета регистра.";
} else {
echo "Подстрока не найдена.";
}
```

---

### 3. **Приведение строк к одному регистру с помощью `strtolower()` или `strtoupper()`**
Если вам нужно сравнить строки, можно привести их к одному регистру с помощью функций `strtolower()` (преобразует строку в нижний регистр) или `strtoupper()` (преобразует строку в верхний регистр), а затем сравнить.

Пример:
```php
$string1 = "Hello";
$string2 = "hELLo";

if (strtolower($string1) === strtolower($string2)) {
echo "Строки равны без учета регистра.";
} else {
echo "Строки не равны.";
}
```

---

### 4. **Использование регулярных выражений с флагом `i`**
Регулярные выражения в PHP поддерживают флаг `i`, который делает сравнение без учета регистра. Это удобно, если вы работаете с более сложными условиями.

Пример:
```php
$string = "Hello World";
$pattern = "/hello/i"; // Флаг 'i' означает игнорирование регистра

if (preg_match($pattern, $string)) {
echo "Совпадение найдено без учета регистра.";
} else {
echo "Совпадение не найдено.";
}
```

---

### 5. **Многоязычная поддержка с использованием `mb_strtolower()`**
Если вы работаете с многоязычными строками (например, с символами, отличными от ASCII), лучше использовать функцию `mb_strtolower()`, которая учитывает локаль и корректно обрабатывает символы Unicode.

Пример:
```php
$string1 = "Привет";
$string2 = "пРИВЕТ";

if (mb_strtolower($string1) === mb_strtolower($string2)) {
echo "Строки равны без учета регистра.";
} else {
echo "Строки не равны.";
}
```

---

### Рекомендации:
- Если вам нужно просто проверить равенство строк без учета регистра, используйте `strcasecmp()`. Это самый быстрый и простой способ.
- Если вы работаете с многоязычными строками или Unicode, используйте `mb_strtolower()` для корректной обработки символов.
- Для поиска подстроки без учета регистра используйте `stristr()` или регулярные выражения с флагом `i`.

---

**Ответ:** Для сравнения строк без учета регистра в PHP рекомендуется использовать функцию `strcasecmp()` как наиболее эффективный и универсальный метод.

Аватар пользователя
Высший разум
3мес

Функция strcasecmp сравнивает без учёта регистра только буквы кодировки ASCII
https://www.php.net/manual/ru/function.strcasecmp.php
Исользуйте mb_strcasecmp
https://www.php.net/manual/en/function.strcasecmp.php#107016