Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

PHP - case-insensitive сравнение на думи

Featured Replies

Здравейте!

Имам следния проблем :

Става въпрос за PHP. ето и кода :

$a = "Auto";

$b = "auto";

if( $a == $b ) {

echo "$a = $b";

}

else {

echo "$a != $b";

}

Резултата в случая е че $a е различно от $b. Интересува ме , каква функция трябва да използвам, така,че при сравнението резултата да е $a = $b ?

Като гледам е нормално да е ти връща false защото има разлика в регистъра на символите.

<?

$a = "Auto";

$b = "auto";


if( strtolower($a) == strtolower($b) ) {


echo "$a = $b";

}

else {


echo "$a != $b";

}

?>

  • Автор

Това определено е решение на проблема, но ме интересува и нещо друго. Да речем, че имаме следната ситуация :

Опитвам се да направя търсачка която като намери даден резултат от търсенето да одебели тази част от текста която съвпада с думата , която търсим.

Пример :

Търсим дума "auto" , и имаме две съвпадения $a = "Test 1 - Auto" и $b = "Test2 - auto".

Как да накарам крайния резултат да е:

Test1 - Auto и Test2 - auto

Това определено е решение на проблема, но ме интересува и нещо друго. Да речем, че имаме следната ситуация :

Опитвам се да направя търсачка която като намери даден резултат от търсенето да одебели тази част от текста която съвпада с думата , която търсим.

Пример :

Търсим дума "auto" , и имаме две съвпадения $a = "Test 1 - Auto" и $b = "Test2 - auto".

Как да накарам крайния резултат да е:

Test1 - Auto и Test2 - auto

<?php

if (preg_match("/auto/i", $a) || preg_match("/auto/i", $b))

{

	echo "Uraaaaaaaaaaaaaaaaaaaaaa";

}

?>

Обърни внимание на буквичката "i", тя експлицитно указва insensitive search. Ето тук още инфо - прочети всичко внимателно.

Редактирано от darkterminal (преглед на промените)

IF-а връща false, понеже в PHP "А" != "а". Всъщност операторите == и === в PHP не са както по принцип - сравнение и сравнение като се имат предвид главна, малка буква, а == е сравнение между каквито и да е типове променливи, като ако е необходимо се правят преобразования, а === връща true само ако изразите са от един тип и ако са идентични, тоест 1 == "1" е true, но 1 === "1" е false. Проблема ти вече са го решили - if( strtolower($a) == strtolower($b). :lol6:

darkterminal

За флага i е ясно че се слага за да не прави разлика в регистъра на символите, но не трябва ли да се сложи флаг и за глобално търсене?

darkterminal

За флага i е ясно че се слага за да не прави разлика в регистъра на символите, но не трябва ли да се сложи флаг и за глобално търсене?

Отговарям :lol6: Модификатор g се слага ако искаш да намериш повече от едно съвпадения в изследвания стринг. Според описната от miraka задача, дори и едно е достатъчно. Така че, липсата на g в съчетание с липсата на ^ и $ модификатори осигурява бързo изпълняем, прост за писане/четене и сигурен критерий за съвпадение. По въпроса доложих! :hush:

Редактирано от darkterminal (преглед на промените)

  • Автор

С помоща, която ми дадохде постигнах някакъв успех със следния код :

$trimmed = 'web';

$patterns = '/'.$trimmed.'/i';

$replacements = "<b>" . $trimmed. "</b>";

$parent_name = 'Web Design';

$parent_name = preg_replace($patterns, $replacements, $parent_name);

Само дето с този код $parent_name получава стойност : 'web Design' а не 'Web Design'.

Интересува ме как да накарам съвпадението не само да се удебели , но и да има същия вид ?

  • Администратор
<?

$trimmed = 'web';


$patterns = '/'.$trimmed.'/i';


$parent_name = 'Web Design';

$parent_name = preg_replace($patterns, "<b>\\0</b>", $parent_name);

echo $parent_name;

?>

  • Автор

poisk този код работи, но има малък пролем. Да речем, че го променим така :

<?

$trimmed = 'web';

$patterns = '/'.$trimmed.'/i';

$parent_name = 'Test Web Design'; //вместо $parent_name = 'Web Design';

$parent_name = preg_replace($patterns, "<b>\\0</b>", $parent_name);

echo $parent_name;

?>

Тогава удебеления текст, ще е от началото до края на съвпадението.

Или иначе казано резултата ,ще е следния : 'Test Web Design' ,

а мен ме интересува, как да се удебели само това което търся и в края

на краищата да стане така ''Test Web Design' ?

Редактирано от miraka (преглед на промените)

  • Администратор

Ти изпробвали го преди да кажеш?

Резултата от написаното от теб е:

Test <b>Web</b> Design

Поне при мен, на PHP 4.4.1 :angry:

  • Автор

Извинявай, направил съм малка грешка. Наистина си работи както трябва. Благодаря ти много !!! :clap::yanim:

  • Автор

poisk извинявай за нахалството, но можеш ли да ми обясниш как точно това нещо : "<b>\\0</b>" намира търсения текст и го удебелява ?

Редактирано от miraka (преглед на промените)

poisk извинявай за нахалството, но можеш ли да ми обясниш как точно това нещо : "<b>\\0</b>" намира търсения текст и го удебелява ?

Да заместя Poisk - позволяваш ли :) Линкчето дето ти дадох вчера обяснява всичко. След парсване на израза с regular expressions се образуват така наречените промениливи на трансформацията. Те се бележат с \N или $N. \0 респ. $0 означава цялото съвпадение, а \1 и нагоре съответния номер подсъвпадение. В твоя случай израза се чете така - Намери ми думата web, без значение от от кейса на буквите и замени със себе си като заградиш съвпадението с HTML тага за удебеляване.

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Публикацията ви съдържа термини, които не допускаме! Моля, редактирайте съдържанието си и премахнете подчертаните думи по-долу. Ако замените букви от думата със звездички или друго, за да заобиколите това предупреждение, профилът ви ще бъде блокиран и наказан!
Напишете отговор в тази тема...

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    26%
    Дарени 256.00 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.