В PHP сравнение строк без учета регистра может быть распространенным требованием. Независимо от того, создаете ли вы систему входа пользователей или реализуете функцию поиска, важно убедиться, что на сравнение строк не влияют различия в регистре букв. В этой статье блога мы рассмотрим семь различных методов сравнения строк без учета регистра в PHP, а также приведем примеры кода и разговорные пояснения.
Метод 1: strcasecmp
Функция strcasecmpсравнивает две строки, игнорируя разницу в регистре. Он возвращает 0, если строки равны, отрицательное значение, если строка1 меньше строки2, и положительное значение, если строка1 больше строки2. Вот пример:
$str1 = "Hello";
$str2 = "hello";
if (strcasecmp($str1, $str2) === 0) {
echo "Strings are equal.";
} else {
echo "Strings are not equal.";
}
Метод 2: strtolower
Функция strtolowerпреобразует строку в нижний регистр. Вы можете использовать эту функцию для преобразования обеих строк перед их сравнением с помощью оператора ==. Вот пример:
$str1 = "Hello";
$str2 = "hello";
if (strtolower($str1) == strtolower($str2)) {
echo "Strings are equal.";
} else {
echo "Strings are not equal.";
}
Метод 3: strtoupper
Подобно strtolower, функция strtoupperпреобразует строку в верхний регистр. Вы можете использовать его для преобразования обеих строк в верхний регистр перед сравнением. Вот пример:
$str1 = "Hello";
$str2 = "hello";
if (strtoupper($str1) == strtoupper($str2)) {
echo "Strings are equal.";
} else {
echo "Strings are not equal.";
}
Метод 4: stristr
Функция stristrвыполняет поиск подстроки внутри строки без учета регистра. Он возвращает часть строки, начиная с первого вхождения подстроки. Вот пример:
$str = "Hello, World!";
$substring = "world";
if (stristr($str, $substring)) {
echo "Substring found.";
} else {
echo "Substring not found.";
}
Метод 5: preg_match с флагом без учета регистра
Регулярные выражения можно использовать для сравнения строк без учета регистра. Используя в шаблоне флаг i, вы можете игнорировать различия в регистре. Вот пример:
$str = "Hello, World!";
if (preg_match("/world/i", $str)) {
echo "Substring found.";
} else {
echo "Substring not found.";
}
Метод 6: strcmp с strtolower
Сочетание функции strcmpс strtolowerпозволяет выполнять сравнение строк без учета регистра. Вот пример:
$str1 = "Hello";
$str2 = "hello";
if (strcmp(strtolower($str1), strtolower($str2)) === 0) {
echo "Strings are equal.";
} else {
echo "Strings are not equal.";
}
Метод 7: пользовательская функция с использованием strcasecmp
Вы можете создать пользовательскую функцию, которая обертывает логику strcasecmp, чтобы упростить будущие сравнения. Вот пример:
function compareStringsCaseInsensitive($str1, $str2) {
return strcasecmp($str1, $str2) === 0;
}
$str1 = "Hello";
$str2 = "hello";
if (compareStringsCaseInsensitive($str1, $str2)) {
echo "Strings are equal.";
} else {
echo "Strings are not equal.";
}
Сравнение строк без учета регистра в PHP важно для различных сценариев. В этой статье мы рассмотрели семь различных методов достижения этой цели: от встроенных функций, таких как strcasecmpи stristr, до пользовательских подходов с использованием strtolowerи регулярные выражения. Теперь у вас есть четкое представление о том, как сравнивать строки, не беспокоясь о различиях в регистре.