2011-02-07 6 views
55

Мне нужно проверить некоторые строки с помощью JavaScript, но чувствительность к регистру вызывает проблемы. , напримерjavascript сравнить строки без учета регистра

if('abc'=='ABC') 
{ 
return true; 
} 

он не будет идти внутри, если петли, хотя смысл слова одинаковы. я не могу использовать ToLower статьи тоже, так как я не знаю, данные, как он пришел бы это означает напр:

if('aBc'=='abC') 
{ 
return true; 
} 

как написать функцию JS для этого, если это может быть сделано с помощью JQuery.

+1

Ответ на этот вопрос гораздо лучше. Я предлагаю вам (текущий читатель) игнорировать эту страницу. –

ответ

111

Вы можете сделать оба аргумента в нижнем регистре, и таким образом вы всегда окажетесь без учета регистра, нечувствительного к регистру.

var string1 = "aBc"; 
var string2 = "AbC"; 

if (string1.toLowerCase() === string2.toLowerCase()) 
{ 
    #stuff 
} 
+2

Примечание: вам нужно быть осторожным, просто применяя это к кодировке как string1 == string2 вернет true, если обе переменные имеют значение null или false, если только один из них равен null. В то время как string1.toLowerCase() == string2.toLowerCase() выдаст ошибку, если любая переменная равна null. –

+5

Фактически, как указано в уже отвеченном вопросе, вы НЕ должны использовать '.toLowerCase()', но '.toUpperCase()'.см. http://stackoverflow.com/questions/2140627/javascript-case-insensitive-string-comparison, а также http://msdn.microsoft.com/en-us/library/bb386042.aspx –

+0

три знака равенства? === – Sandeep

4

Попробуйте это ...

if(string1.toLowerCase() == string2.toLowerCase()){ 
    return true; 
} 

Кроме того, это не цикл, это блок кода. Петли обычно повторяются (хотя они могут выполняться только один раз), тогда как блок кода никогда не повторяется.

Я прочитал вашу записку о том, что не использую toLowerCase, но не могу понять, почему это будет проблемой.

8

Вы также можете использовать string.match().

var string1 = "aBc"; 
var match = string1.match(/AbC/i); 

if(match) { 
} 
+1

Возможно ли использовать другую переменную вместо/AbC/part ???? –

+0

YeppThat'sMe: Да, вы могли бы сделать: var string1 = "aBc", regex =/AbC/i, match = string1.match (regex); Обратите внимание: соответствие будет частью строки, которая соответствует регулярному выражению, или null, если регулярное выражение ничего не соответствует. Я отправлю альтернативный ответ, который использует другой метод regex для этого. – Akrikos

+5

Вы должны использовать '/^abc$/i.test (« aBc »)', потому что без привязки в начале и в конце это действительно говорит ** содержит **, а не ** равно **. –

18

Другой метод с использованием регулярных выражений (это правильнее, чем ответ Закари):

var string1 = 'someText', 
    string2 = 'SometexT', 
    regex = new RegExp('^' + string1 + '$', 'i'); 

if (regex.test(string2)) { 
    return true; 
} 

RegExp.test() возвращает истину или ложь.

Кроме того, добавив '^' (означающий начало строки) в начало и '$' (означая конец строки) до конца, убедитесь, что ваше регулярное выражение будет соответствовать только если 'sometext' является единственным текстом в stringToTest. Если вы ищете текст, содержащий регулярное выражение, это нормально, чтобы оставить их выключенными.

Может быть проще использовать метод string.toLowerCase().

Итак, регулярные выражения являются мощными, но вы должны использовать их только в том случае, если вы понимаете, как они работают. Неожиданные вещи могут произойти, когда вы используете то, что не понимаете.

Есть тонны регулярных выражений «учебники», но большинство из них, похоже, пытается подтолкнуть определенный продукт. Вот что выглядит как приличный учебник ... Конечно, это написано для использования PHP, но в противном случае, это, кажется, хороший начинающий учебник: http://weblogtoolscollection.com/regex/regex.php

Это, как представляется, являются хорошим инструментом для тестирования регулярных выражений: http://gskinner.com/RegExr/

+0

этот лучший, даже он работает для null, в то время как toUpperCase или toLowerCase дает ошибку - estupendo –

+0

Что делать, если строка1 недействительна шаблона регулярного выражения? Для eample 'new RegExp ('^ (a $', 'i')' –

+0

@Bohdan, я бы рекомендовал вам попробовать что-то в консоли js. Если вы это сделаете, вы обнаружите, что ваш браузер бросает SyntaxError, поэтому я не думаю, что это актуально в этом случае. – Akrikos

Смежные вопросы