Tengo lo siguiente:
if (referrer.indexOf("Ral") == -1) { ... }
Lo que me gusta hacer es Ralsensible a mayúsculas, por lo que puede ser RAl, rAl, etc y todavía igualar.
¿Hay alguna manera de decir que Raltiene que ser sensible a mayúsculas y minúsculas?
javascript
string
case-sensitive
case-insensitive
Nate Pet
fuente
fuente

RegExpdirectamente desde la entrada del usuario. Por ejemplo, un usuario podría ingresar*y se generaría un error en elRegExpconstructor. La solución aceptada no tiene este problema.Respuestas:
Añadir
.toLowerCase()despuésreferrer. Este método convierte la cadena en una cadena minúscula. Luego, use.indexOf()usando enrallugar deRal.Lo mismo también se puede lograr usando una Expresión regular (especialmente útil cuando se quiere probar contra patrones dinámicos):
fuente
toLocaleLowerCase()( ref ).search:var index = referrer.search(/Ral/i);Otra opción es utilizar el método de búsqueda de la siguiente manera:
Se ve más elegante luego de convertir toda la cadena a minúsculas y puede ser más eficiente.
Con
toLowerCase()el código tiene dos pasadas sobre la cadena, una pasa en toda la cadena para convertirla a minúsculas y otra es buscar el índice deseado.Con
RegExpel código, pase una vez sobre la cadena que parece coincidir con el índice deseado.Por lo tanto, en cadenas largas, recomiendo usar la
RegExpversión (supongo que en cadenas cortas esta eficiencia se debe a la creación delRegExpobjeto)fuente
Use un RegExp:
O use
.toLowerCase():fuente
Desde ES2016 también puede usar un método ligeramente mejor / más fácil / más elegante (distingue entre mayúsculas y minúsculas):
o (sin distinción entre mayúsculas y minúsculas):
Aquí hay alguna comparación de
.indexOf()y.includes(): https://dev.to/adroitcoder/includes-vs-indexof-in-javascriptfuente
includeses entre mayúsculas y minúsculas en Chrome: intento'fooBar'.includes('bar')==>falseHay un par de enfoques aquí.
Si desea realizar una comprobación sin distinción entre mayúsculas y minúsculas solo para esta instancia, haga algo como lo siguiente.
Alternativamente, si realiza esta comprobación regularmente, puede agregar un nuevo
indexOf()método similarString, pero no distingue entre mayúsculas y minúsculas.fuente
defineProperty, sugieroObject.defineProperty(String.prototype, 'indexOfInsensitive', {value: function(s,b){return this.toLowerCase().indexOf((s+'').toLowerCase(),b);}});. Dos actualizaciones: conversión de cadena explícita usando(s+''), y no enumerable en un bucle (for(var i in '') ...no se muestraindexOfInsensitive.fuente
Puedes probar esto
fuente
Ejemplo para cualquier idioma:
fuente
Es 2016, ¿y no hay una forma clara de cómo hacer esto? Esperaba un poco de copypasta. Voy a intentarlo
Notas de diseño: quería minimizar el uso de memoria y, por lo tanto, mejorar la velocidad, por lo que no hay copia / mutación de cadenas. Supongo que V8 (y otros motores) pueden optimizar esta función.
Mi razón para el nombre:
Por qué no...:
toLowerCase()- posibles llamadas repetidas a toLowerCase en la misma cadena.RegExp- incómodo para buscar con variable. Incluso el objeto RegExp es incómodo al tener que escapar de los personajesfuente
Para hacer una mejor búsqueda, use el siguiente código,
En la primera alerta (), JavaScript devolvió "-1"; en otras palabras, indexOf () no encontró una coincidencia: esto se debe simplemente a que "JavaScript" está en minúscula en la primera cadena y se escribe correctamente en mayúscula en la segunda. Para realizar búsquedas que no distinguen entre mayúsculas y minúsculas con indexOf (), puede hacer que ambas cadenas sean mayúsculas o minúsculas. Esto significa que, como en la segunda alerta (), JavaScript solo verificará la aparición de la cadena que está buscando, se ignoraron las mayúsculas.
Referencia, http://freewebdesigntutorials.com/javaScriptTutorials/jsStringObject/indexOfMethod.htm
fuente
Si
referreres una matriz, puede usarfindIndex()fuente
Aquí está mi opinión:
Guión :
HTML:
Codepen
fuente