I am trying to find if an image has in its source name noPic
which can be in upper or lower case.
var noPic = largeSrc.indexOf("nopic");
Should I write :
var noPic = largeSrc.toLowerCase().indexOf("nopic");
But this solution doesn’t work…
Mamun
65.5k9 gold badges47 silver badges59 bronze badges
asked Aug 7, 2009 at 17:13
2
You can use regex with a case-insensitive modifier — admittedly not necessarily as fast as indexOf.
var noPic = largeSrc.search(/nopic/i);
answered Aug 7, 2009 at 17:17
jharlapjharlap
8267 silver badges5 bronze badges
6
No, there is no case-insensitive way to call that function. Perhaps the reason your second example doesn’t work is because you are missing a call to the text()
function.
Try this:
var search = "nopic";
var noPic = largeSrc.text().toLowerCase().indexOf(search.toLowerCase());
answered Aug 7, 2009 at 17:15
Andrew HareAndrew Hare
343k71 gold badges636 silver badges634 bronze badges
1
Note that if the search string is from user input you’ll need to escape the special regexp characters.
Here’s what it would look like:
var search = getUserInput();
/* case-insensitive search takes around 2 times more than simple indexOf() */
var regex = RegExp(search.replace(/[-/\^$*+?.()|[]{}]/g, '\$&'), "i");
var noPic = testString.search(regex);
See the updated jsperf: http://jsperf.com/regex-vs-tolowercase-then-regex/4
footnote: regexp escaping from https://stackoverflow.com/a/3561711/1333402
Klesun
12k5 gold badges57 silver badges51 bronze badges
answered Nov 12, 2013 at 3:57
ssmithssmith
6849 silver badges11 bronze badges
1
Try with:
var lowerCaseLargeSrc = largeSrc.toLowerCase();
var noPic = lowerCaseLargeSrc.indexOf("nopic");
answered Oct 28, 2014 at 14:25
1
Your code will only work if largeSrc is already a string. You might be getting an input that’s an html element instead. So, use jQuery to resolve any potential input element into the text that’s inside it. Example:
var noPic = largeSrc.text().toLowerCase().indexOf("nopic");
Barett
5,7876 gold badges50 silver badges55 bronze badges
answered Nov 19, 2015 at 20:05
0
How about using findIndex instead that way you can do all your toLowerCase() inside the callback. Worked great for me:
// Not Supported in IE 6-11
const arr = ['HELLO', 'WORLD'];
const str = 'world';
const index = arr.findIndex(element => {
return element.toLowerCase() === str.toLowerCase();
});
console.log(index); // 👉️ 1
if (index !== -1) {
// 👉️ string is in the array
}
Credit:
https://bobbyhadz.com/blog/javascript-make-array-indexof-case-insensitive
answered May 25, 2022 at 17:33
Possible Duplicate:
Case insensitive contains(string)
With Contains()
method of String class a substring can be found.
How to find a substring in a string in a case-insensitive manner?
asked Dec 13, 2011 at 19:04
0
You can use the IndexOf() method, which takes in a StringComparison type:
string s = "foobarbaz";
int index = s.IndexOf("BAR", StringComparison.CurrentCultureIgnoreCase); // index = 3
If the string was not found, IndexOf() returns -1.
answered Dec 13, 2011 at 19:06
MartyMarty
7,4141 gold badge31 silver badges51 bronze badges
0
There’s no case insensitive version. Use IndexOf
instead (or a regex though that is not recommended and overkill).
string string1 = "my string";
string string2 = "string";
bool isContained = string1.IndexOf(string2, StringComparison.OrdinalIgnoreCase) >= 0;
StringComparison.OrdinalIgnoreCase
is generally used for more «programmatic» text like paths or constants that you might have generated and is the fastest means of string comparison. For text strings that are linguistic use StringComparison.CurrentCultureIgnoreCase
or StringComparison.InvariantCultureIgnoreCase
.
plr108
1,19110 silver badges16 bronze badges
answered Dec 13, 2011 at 19:08
scottheckelscottheckel
9,0761 gold badge35 silver badges47 bronze badges
2
Contains returns a boolean if a match is found. If you want to search case-insensitive, you can make the source string and the string to match both upper case or lower case before matching.
Example:
if(sourceString.ToUpper().Contains(stringToFind.ToUpper()))
{
// string is found
}
answered Dec 13, 2011 at 19:06
Jesse van AssenJesse van Assen
2,2322 gold badges16 silver badges19 bronze badges
1
stringToSearch.ToLower().Contains(stringToSearchFor.ToLower())
answered Dec 13, 2011 at 19:07
1
string myString = "someTextorMaybeNot";
myString.ToUpper().Contains( "text".ToUpper() );
answered Dec 13, 2011 at 19:07
Muad’DibMuad’Dib
28.3k5 gold badges55 silver badges68 bronze badges
1
(PHP 5, PHP 7, PHP
stripos — Возвращает позицию первого вхождения подстроки без учёта регистра
Описание
stripos(string $haystack
, string $needle
, int $offset
= 0): int|false
В отличие от strpos(), эта функция не
учитывает регистр символов.
Список параметров
-
haystack
-
Строка, в которой производится поиск.
-
needle
-
Заметьте, что
needle
может содержать
строку из одного или более символов.До PHP 8.0.0, если параметр
needle
не является строкой,
он преобразуется в целое число и трактуется как код символа.
Это поведение устарело с PHP 7.3.0, и полагаться на него крайне не рекомендуется.
В зависимости от предполагаемого поведения,
параметрneedle
должен быть либо явно приведён к строке,
либо должен быть выполнен явный вызов chr(). -
offset
-
Если этот параметр указан, то поиск будет начат с указанного количества символов с
начала строки. Если задано отрицательное значение, отсчёт позиции начала поиска
будет произведён с конца строки.
Возвращаемые значения
Возвращает позицию, в которой находится искомая строка, относительно
начала строки haystack
(независимо от смещения (offset)).
Также обратите внимание на то, что позиция строки отсчитывается от 0, а не от 1.
Возвращает false
, если искомая строка не найдена.
Внимание
Эта функция может возвращать как логическое значение false
, так и значение не типа boolean, которое приводится к false
. За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.
Список изменений
Версия | Описание |
---|---|
8.2.0 |
Преобразование регистра больше не зависит от локали, установленной с помощью функции setlocale(). Будут преобразованы только символы ASCII. Байты не ASCII-кодировке будут сравниваться по значению байта. |
8.0.0 |
Передача целого числа (int) в needle больше не поддерживается.
|
7.3.0 |
Передача целого числа (int) в needle объявлена устаревшей.
|
7.1.0 |
Добавлена поддержка отрицательных значений offset .
|
Примеры
Пример #1 Пример использования stripos()
<?php
$findme = 'a';
$mystring1 = 'xyz';
$mystring2 = 'ABC';$pos1 = stripos($mystring1, $findme);
$pos2 = stripos($mystring2, $findme);// Конечно, 'a' не входит в 'xyz'
if ($pos1 === false) {
echo "Строка '$findme' не найдена в строке '$mystring1'";
}// Заметьте, что используется ===. Использование == не даст верного
// результата, так как 'a' в нулевой позиции.
if ($pos2 !== false) {
echo "Нашёл '$findme' в '$mystring2' в позиции $pos2";
}
?>
Примечания
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
Смотрите также
- mb_stripos() — Регистронезависимый поиск позиции первого вхождения одной строки в другую
- str_contains() — Определяет, содержит ли строка заданную подстроку
- str_ends_with() — Проверяет, заканчивается ли строка заданной подстрокой
- str_starts_with() — Проверяет, начинается ли строка с заданной подстроки
- strpos() — Возвращает позицию первого вхождения подстроки
- strrpos() — Возвращает позицию последнего вхождения подстроки в строке
- strripos() — Возвращает позицию последнего вхождения подстроки без учёта регистра
- stristr() — Регистронезависимый вариант функции strstr
- substr() — Возвращает подстроку
- str_ireplace() — Регистронезависимый вариант функции str_replace
emperorshishire at gmail dot com ¶
14 years ago
I found myself needing to find the first position of multiple needles in one haystack. So I wrote this little function:
<?php
function multineedle_stripos($haystack, $needles, $offset=0) {
foreach($needles as $needle) {
$found[$needle] = stripos($haystack, $needle, $offset);
}
return $found;
}// It works as such:
$haystack = "The quick brown fox jumps over the lazy dog.";
$needle = array("fox", "dog", ".", "duck")
var_dump(multineedle_stripos($haystack, $needle));
/* Output:
array(3) {
["fox"]=>
int(16)
["dog"]=>
int(40)
["."]=>
int(43)
["duck"]=>
bool(false)
}
*/
?>
sorrynorealemail at example dot com ¶
4 years ago
Unlike strpos() it seems that stripos() does NOT issue a WARNING if the needle is an empty string ''.
emanuel dot karlsson at rolfsbuss dot se ¶
4 years ago
Finding numbers in strings requires you to cast the number to string first.
strpos("123", 2) !== strpos("123", "2")
spam at kleppinger dot com ¶
8 years ago
Regarding the function by spam at wikicms dot org
It is very bad practice to use the same function name as an existing php function but have a different output format. Someone maintaining the code in the future is likely to be very confused by this. It will also be hard to eradicate from a codebase because the naming is identical so each use of stripos() would have to be analyzed to see how it is expecting the output format (bool or number/bool).
Calling it string_found() or something like that would make a lot more sense for long-term use.
Ian Macdonald ¶
7 years ago
Regarding the === note, it might be worth clarifying that the correct tests for a binary found/not found condition are !==false to detect found, and ===false to detect not found.
steve at opilo dot net ¶
9 years ago
A handy function if you need to adjust layout based on whether or not a string contains descending letters:
<?php function containsDescenders($text) {
$descenders = array("g","j","p","q","y");
foreach ($descenders as $letter) {
if (stripos($text,$letter) !== false) {
return true;
}
}
return false;
} ?>
spam at wikicms dot org ¶
9 years ago
If you like using ternary operator, I wrote simple example how to use stripos function.
Also, in my example I add "How to use namespaces" for wide knowledges for newbies.
<?php
namespace My;//You can be free using core functions in your NameSpaces (My)
function stripos($haystack, $needle) {
//To call core function (from global NS) you should add backslash only - func
return (FALSE === stripos($haystack, $needle)) ? FALSE : TRUE;
}var_dump(stripos($haystack = 'John knows English language.', $needle = 'john')); //TRUE
var_dump(stripos($haystack = 'Sara knows English language too.', $needle = 'john')); //FALSE
?>
grf at post dot cz ¶
16 years ago
this would to work with any language, i hope.
tested on czech (eastern europe) lang.
<?php
/****************************************
* SAFE HIGHLIGHT
****************************************/
/**
* function finds and encase every string in a $needleArr array with
* strings $shearLft (from the left side) and $shearRgt (guess from which
* side).
* already encased needles are IGNORED for any other step, so order
* of needles in $needleArr is pretty important.
*
* function is searching needles in case-insensitive mode,
* but case in the subject is saved.
*
* can you do it better? so, do it.
*
* @param array $needleArr array of needles
* @param string $shearLft left shear
* @param string $shearRgt right shear
* @param string $subject subject
* @param string $encoding encoding ('utf-8' is default)
*
* @author griffin
*/
function safeHighlight( $needleArr, $shearLft, $shearRgt, $subject, $encoding = 'utf-8')
{
// encoding
$e = $encoding;
// oh, no needles
if( !is_array( $needleArr))
return $subject;
// empty keys throw-off, only unique, reindex
$nA = array_values(
array_unique(
array_diff( $needleArr, array(''))
)
);
// needle count
if( !($nC = count( $nA)))
return $subject; // nothing to hl
// shear length
if( !(($rLL = mb_strlen( $rL = $shearLft, $e))
+ ($rRL = mb_strlen( $rR = $shearRgt, $e))))
return $subject; // no shears
// subject length
if( !($sL = mb_strlen( $s = $subject, $e)))
return null; // empty subject
// subject in lowercase (we need to aviod
// using mb_stripos due to PHP version)
$sW = mb_strtolower( $s, $e);
// masking ~ 0=not changed, 1=changed
$m = str_repeat( '0', $sL);
// loop for each needle
for( $n=0; $n<$nC; $n++)
{
// needle string loWercase
$nW = mb_strtolower( $nA[ $n], $e);
$o = 0; // offset
$nL = mb_strlen( $nW, $e); // needle length
// search needle
while( false !== ($p = mb_strpos( $sW, $nW, $o, $e)))
{
// oh hurrey, needle found on $p position
// is founded needle already modified? (in full-length)
for( $q=$p; $q<($p+$nL); $q++)
if( $m[ $q])
{
// ai, caramba. already modified, jump over
$o+= $nL;
// continue for while() loop - not for for() loop!
continue 2;
}
// explode subject and mask into three parts
// partA|needle|partB
$sE[0] = mb_substr( $s, 0, $p, $e);
$sE[1] = mb_substr( $s, $p, $nL, $e);
$sE[2] = mb_substr( $s, $p+$nL, $sL-$p-$nL, $e);
// mask
// partA|partB (needle not needed)
$mE[0] = mb_substr( $m, 0, $p, $e);
$mE[1] = mb_substr( $m, $p+$nL, $sL-$p-$nL, $e);
// apply shears
$sE[1] = $rL.$sE[1].$rR;
// update sunject length
$sL+= $rLL + $rRL;
// update mask
$m = $mE[0] . str_repeat( '1', $rLL + $nL + $rRL) . $mE[1];
// implode into a subject
$s = implode( $sE);
// update lowercase subject
$sW = mb_strtolower( $s, $e);
// increase offset
$o+= $rLL + $nL + $rRL;
// end of string reached
if( $o>=$sL)
break;
}
// while()
} // for( $n=0; $n<$nC; $n++)
// oouu yeaaa, kick the subject out of the function
return $s;
}
// function safeHighlight()
/****************************************
* END: SAFE HIGHLIGHT
****************************************/
?>
Как найти слово в строке без учета регистра?
"Привет, мир".indexOf("Привет")
вернет 0, как и надо"Привет, мир".indexOf("привет")
вернет -1, как НЕ надо, заменил «Привет» на «привет» буква «п» стала маленькой
как сделать поиск регистра-независимым?
-
Вопрос заданболее трёх лет назад
-
25749 просмотров
Если не требуется поиск позиции где встретилось значение, можно регуляркой:
var str = 'Привет, мир';
var reg = /привет/i;
reg.test(str) => true
"Привет, мир".toUpperCase().indexOf("мир".toUpperCase())
Пригласить эксперта
use toLowerCase()
«Привет, мир».toLowerCase().indexOf(«привет»)
-
Показать ещё
Загружается…
28 мая 2023, в 22:23
1000 руб./за проект
28 мая 2023, в 21:40
125000 руб./за проект
28 мая 2023, в 21:33
20000 руб./за проект
Минуточку внимания
stripos
(PHP 5, PHP 7)
stripos — Возвращает позицию первого вхождения подстроки без учета регистра
Описание
mixed stripos
( string $haystack
, string $needle
[, int $offset
= 0
] )
В отличие от strpos(), эта функция не
учитывает регистр символов.
Список параметров
-
haystack
-
Строка, в которой производится поиск.
-
needle
-
Заметьте, что
needle
может содержать
строку из одного или более символов.Если
needle
не является строкой, он приводится
к целому и трактуется как код символа. -
offset
-
Если этот параметр указан, то поиск будет начат с указанного количества символов с начала строки. В отличии от strrpos() и
strripos() данный параметр не может быть отрицательным.
Возвращаемые значения
Возвращает позицию, в которой находится искомая строка, относительно
начала строки haystack
(независимо от смещения (offset).
Также обратите внимание на то, что позиция строки отсчитывается от 0, а не от 1.
Возвращает FALSE
, если искомая строка не найдена.
Внимание
Эта функция
может возвращать как boolean FALSE
, так и не-boolean значение,
которое приводится к FALSE
. За более подробной информацией обратитесь к разделу
Булев тип. Используйте оператор === для проверки значения,
возвращаемого этой функцией.
Примеры
Пример #1 Пример использования stripos()
<?php
$findme = 'a';
$mystring1 = 'xyz';
$mystring2 = 'ABC';$pos1 = stripos($mystring1, $findme);
$pos2 = stripos($mystring2, $findme);// Конечно, 'a' не входит в 'xyz'
if ($pos1 === false) {
echo "Строка '$findme' не найдена в строке '$mystring1'";
}// Заметьте, что используется ===. Использование == не даст верного
// результата, так как 'a' в нулевой позиции.
if ($pos2 !== false) {
echo "Нашел '$findme' в '$mystring2' в позиции $pos2";
}
?>
Примечания
Замечание: Эта функция безопасна
для обработки данных в двоичной форме.
Смотрите также
- mb_stripos() — Поиск позиции первого вхождения одной строки в другую, нечувствителен к регистру
- strpos() — Возвращает позицию первого вхождения подстроки
- strrpos() — Возвращает позицию последнего вхождения подстроки в строке
- strripos() — Возвращает позицию последнего вхождения подстроки без учета регистра
- stristr() — Регистронезависимый вариант функции strstr
- substr() — Возвращает подстроку
- str_ireplace() — Регистронезависимый вариант функции str_replace
Вернуться к: Обработка строк