Tengo lo siguiente:
if (referrer.indexOf("Ral") == -1) { ... }
Lo que me gusta hacer es Ral
sensible a mayúsculas, por lo que puede ser RAl
, rAl
, etc y todavía igualar.
¿Hay alguna manera de decir que Ral
tiene que ser sensible a mayúsculas y minúsculas?
javascript
string
case-sensitive
case-insensitive
Nate Pet
fuente
fuente
RegExp
directamente desde la entrada del usuario. Por ejemplo, un usuario podría ingresar*
y se generaría un error en elRegExp
constructor. 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 enral
lugar 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
RegExp
el código, pase una vez sobre la cadena que parece coincidir con el índice deseado.Por lo tanto, en cadenas largas, recomiendo usar la
RegExp
versión (supongo que en cadenas cortas esta eficiencia se debe a la creación delRegExp
objeto)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
includes
es entre mayúsculas y minúsculas en Chrome: intento'fooBar'.includes('bar')
==>false
Hay 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
referrer
es una matriz, puede usarfindIndex()
fuente
Aquí está mi opinión:
Guión :
HTML:
Codepen
fuente