validar una numeros new manejo longitud letras insertar funciones funcion extraer eliminar caracter cadenas cadena javascript string

una - Comparación de cadenas insensibles de mayúsculas y minúsculas de JavaScript



manejo de cadenas en javascript (17)

¿Qué hay de NO lanzar excepciones y NO usar expresiones regulares lentas?

return str1 != null && str2 != null && typeof str1 === ''string'' && typeof str2 === ''string'' && str1.toUpperCase() === str2.toUpperCase();

El fragmento de código anterior supone que no desea coincidir si alguna de las cadenas es nula o no está definida.

Si desea hacer coincidir nulo / indefinido, entonces:

return (str1 == null && str2 == null) || (str1 != null && str2 != null && typeof str1 === ''string'' && typeof str2 === ''string'' && str1.toUpperCase() === str2.toUpperCase());

Si por alguna razón te importa undefined vs null:

return (str1 === undefined && str2 === undefined) || (str1 === null && str2 === null) || (str1 != null && str2 != null && typeof str1 === ''string'' && typeof str2 === ''string'' && str1.toUpperCase() === str2.toUpperCase());

¿Cómo realizo una comparación de cadenas que no distingue mayúsculas de minúsculas en JavaScript?


Como ninguna respuesta proporcionó claramente un fragmento de código simple para usar RegExp , aquí está mi intento:

function compareInsensitive(str1, str2){ return typeof str1 === ''string'' && typeof str2 === ''string'' && new RegExp("^" + str1.replace(/[-////^$*+?.()|[/]{}]/g, ''//$&'') + "$", "i").test(str2); }

Tiene varias ventajas:

  1. Verifica el tipo de parámetro (cualquier parámetro que no sea una cadena, como undefined por ejemplo, bloquearía una expresión como str1.toUpperCase() ).
  2. No sufre de posibles problemas de internacionalización.
  3. Escapa de la cadena RegExp .

Como se dijo en comentarios recientes, developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… admite comparaciones que no distinguen entre mayúsculas y minúsculas (entre otras cosas poderosas).

Aquí hay un ejemplo simple

''xyz''.localeCompare(''XyZ'', undefined, { sensitivity: ''base'' }); // returns 0

Y una función genérica que podrías usar.

function equalsIgnoringCase(text, other) { text.localeCompare(other, undefined, { sensitivity: ''base'' }) === 0; }

Tenga en cuenta que, en lugar de undefined , probablemente deba ingresar la configuración regional específica con la que está trabajando. Esto es importante como se indica en los documentos de MDN

en sueco, ä y a son letras base separadas

Opciones de sensibilidad

Soporte del navegador

A partir del momento de la publicación, UC Browser para Android y Opera Mini no son compatibles con la configuración regional y los parámetros de opciones . Consulte https://caniuse.com/#search=localeCompare para obtener información actualizada.


Con la ayuda de la expresión regular también podemos lograrlo.

(/keyword/i).test(source)

/i es para ignorar el caso. Si no es necesario, podemos ignorar y probar la coincidencia NO sensible a mayúsculas como

(/keyword/).test(source)


Escribí una extensión. muy trivial

if (typeof String.prototype.isEqual!= ''function'') { String.prototype.isEqual = function (str){ return this.toUpperCase()==str.toUpperCase(); }; }


Hay dos formas de comparación entre mayúsculas y minúsculas:

  1. Convierta cadenas a mayúsculas y luego compárelas con el operador estricto ( === ). Cómo el operador estricto trata a los operandos, lea cosas en: http://www.thesstech.com/javascript/relational-logical-operators
  2. Coincidencia de patrones utilizando métodos de cadena:

Utilice el método de cadena de "búsqueda" para la búsqueda no sensible a mayúsculas. Lea acerca de la búsqueda y otros métodos de cadena en: http://www.thesstech.com/pattern-matching-using-string-methods

<!doctype html> <html> <head> <script> // 1st way var a = "apple"; var b = "APPLE"; if (a.toUpperCase() === b.toUpperCase()) { alert("equal"); } //2nd way var a = " Null and void"; document.write(a.search(/null/i)); </script> </head> </html>


Incluso esta pregunta ya ha respondido. Tengo un enfoque diferente para usar RegExp y hacer coincidir para ignorar las mayúsculas y minúsculas. Por favor vea mi enlace https://jsfiddle.net/marchdave/7v8bd7dq/27/

$("#btnGuess").click(guessWord); function guessWord() { var letter = $("#guessLetter").val(); var word = ''ABC''; var pattern = RegExp(letter, ''gi''); // pattern: /a/gi var result = word.match(pattern); alert(''Ignore case sensitive:'' + result); }


La forma más sencilla de hacerlo (si no está preocupado por los caracteres especiales de Unicode) es llamar a toUpperCase :

var areEqual = string1.toUpperCase() === string2.toUpperCase();


Muchas respuestas aquí, pero me gusta agregar una solución basada en la extensión del String lib:

String.prototype.equalIgnoreCase = function(str) { return (str != null && typeof str === ''string'' && this.toUpperCase() === str.toUpperCase()); }

¡De esta manera puedes usarlo como lo haces en Java!

Ejemplo:

var a = "hello"; var b = "HeLLo"; var c = "world"; if (a.equalIgnoreCase(b)) { document.write("a == b"); } if (a.equalIgnoreCase(c)) { document.write("a == c"); } if (!b.equalIgnoreCase(c)) { document.write("b != c"); }

La salida será:

"a == b" "b != c"

String.prototype.equalIgnoreCase = function(str) { return (str != null && typeof str === ''string'' && this.toUpperCase() === str.toUpperCase()); } var a = "hello"; var b = "HeLLo"; var c = "world"; if (a.equalIgnoreCase(b)) { document.write("a == b"); document.write("<br>"); } if (a.equalIgnoreCase(c)) { document.write("a == c"); } if (!b.equalIgnoreCase(c)) { document.write("b != c"); }


Recientemente, he creado una micro biblioteca que brinda ayuda a las cadenas que no distinguen entre mayúsculas y minúsculas: https://github.com/nickuraltsev/ignore-case . (Utiliza toUpperCase internamente.)

var ignoreCase = require(''ignore-case''); ignoreCase.equals(''FOO'', ''Foo''); // => true ignoreCase.startsWith(''foobar'', ''FOO''); // => true ignoreCase.endsWith(''foobar'', ''BaR''); // => true ignoreCase.includes(''AbCd'', ''c''); // => true ignoreCase.indexOf(''AbCd'', ''c''); // => 2


Recuerde que la carcasa es una operación específica de locale. Dependiendo del escenario, es posible que desee tenerlo en cuenta. Por ejemplo, si está comparando nombres de dos personas, es posible que desee considerar la configuración regional, pero si está comparando valores generados por máquinas, como UUID, es posible que no lo haga. Esta es la razón por la que uso la siguiente función en mi biblioteca de utilidades (tenga en cuenta que la comprobación de tipos no se incluye por motivos de rendimiento)

function compareStrings (string1, string2, ignoreCase, useLocale) { if (ignoreCase) { if (useLocale) { string1 = string1.toLocaleLowerCase(); string2 = string2.toLocaleLowerCase(); } else { string1 = string1.toLowerCase(); string2 = string2.toLowerCase(); } } return string1 === string2; }


Si ambas cadenas tienen la misma configuración regional conocida, es posible que desee utilizar el objeto Intl.Collator esta manera:

function equalIgnoreCase(s1: string, s2: string) { return new Intl.Collator("en-US", { sensitivity: "base" }).compare(s1, s2) === 0; }

Obviamente, es posible que desee almacenar en caché el Collator para una mejor eficiencia.

Las ventajas de este enfoque es que debería ser mucho más rápido que el uso de RegExps y se basa en un conjunto extremadamente personalizable (consulte la descripción de las locales y los parámetros del constructor de options en el artículo anterior) de compiladores listos para usar.


Si está preocupado por la dirección de la desigualdad (quizás quiera ordenar una lista), tiene que hacer una conversión de mayúsculas, y ya que hay más caracteres en minúscula en unicode que en mayúsculas, toLowerCase es probablemente la mejor conversión a utilizar.

function my_strcasecmp( a, b ) { if((a+'''').toLowerCase() > (b+'''').toLowerCase()) return 1 if((a+'''').toLowerCase() < (b+'''').toLowerCase()) return -1 return 0 }

Javascript parece usar la configuración regional "C" para las comparaciones de cadenas, por lo que el orden resultante será feo si las cadenas contienen letras que no sean ASCII. no se puede hacer mucho al respecto sin hacer una inspección mucho más detallada de las cuerdas.


Supongamos que queremos encontrar la needle variable de cadena en el haystack variable de cadena. Hay tres trampas:

  1. Las aplicaciones internacionalizadas deben evitar string.toUpperCase y string.toLowerCase . Utilice una expresión regular que ignora el caso en su lugar. Por ejemplo, var needleRegExp = new RegExp(needle, "i"); seguido de needleRegExp.test(haystack) .
  2. En general, es posible que no sepa el valor de la needle . Tenga cuidado de que la needle no contenga ningún carácter especial de expresión regular. Escape de estos usando needle.replace(/[-[/]{}()*+?.,//^$|#/s]/g, "//$&"); .
  3. En otros casos, si desea hacer coincidir con precisión la needle y el haystack , simplemente ignorando el caso, asegúrese de agregar "^" al comienzo y "$" al final de su constructor de expresiones regulares.

Teniendo en cuenta los puntos (1) y (2), un ejemplo sería:

var haystack = "A. BAIL. Of. Hay."; var needle = "bail."; var needleRegExp = new RegExp(needle.replace(/[-[/]{}()*+?.,//^$|#/s]/g, "//$&"), "i"); var result = needleRegExp.test(haystack); if (result) { // Your code here }


usar regix para la concordancia de cadenas o comparación,

en javaScript, puede usar match () para la comparación de cadenas, no olvide poner i en regix

ejemplo:

var matchString = "Test" ; if(matchString.match(/test/i) ){ alert(''String matched) ; }else{ alert(''String not matched'') ; }


EDITAR : Esta respuesta tiene 7 años. Hoy deberías usar developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… .

Respuesta original

La mejor manera de hacer una comparación entre mayúsculas y minúsculas en JavaScript es usar el método RegExp match () con la marca ''i''.

JavaScript: búsqueda insensible a mayúsculas

Cuando las dos cadenas que se comparan son variables (no constantes), entonces es un poco más complicado porque necesita generar un RegExp desde la cadena, pero pasar la cadena al constructor RegExp puede dar como resultado coincidencias incorrectas o fallidas si la cadena tiene una expresión regular especial personajes en el

Si le importa la internacionalización, no use toLowerCase () o toUpperCase (), ya que no ofrece comparaciones precisas y sensibles a mayúsculas y minúsculas en todos los idiomas.

i18nguy.com/unicode/turkish-i18n.html


str = ''Lol'', str2 = ''lOl'', regex = new RegExp(''^'' + str + ''$'', ''i''); if (regex.test(str)) { console.log("true"); }