Eu tenho o seguinte:
if (referrer.indexOf("Ral") == -1) { ... }
O que eu gostaria de fazer é fazer com que Ral
maiúsculas e minúsculas, de modo que ele pode ser RAl
, rAl
, etc. e ainda igualar.
Existe uma maneira de dizer que isso Ral
não diferencia maiúsculas de minúsculas?
javascript
string
case-sensitive
case-insensitive
Nate Pet
fonte
fonte
RegExp
entrada diretamente do usuário. Por exemplo, um usuário pode entrar*
e um erro será gerado noRegExp
construtor. A solução aceita não tem esse problema.Respostas:
Adicione
.toLowerCase()
depoisreferrer
. Esse método transforma a string em uma minúscula. Em seguida, use.indexOf()
usando emral
vez deRal
.O mesmo também pode ser alcançado usando uma expressão regular (especialmente útil quando você deseja testar padrões dinâmicos):
fonte
toLocaleLowerCase()
( ref ).search
:var index = referrer.search(/Ral/i);
Outra opção é usar o método de pesquisa da seguinte maneira:
Parece mais elegante do que converter toda a cadeia para minúscula e pode ser mais eficiente.
Com
toLowerCase()
o código tem duas passagens sobre a sequência, uma passagem está na sequência inteira para convertê-la em minúsculas e outra é procurar o índice desejado.Com
RegExp
o código, passe uma sobre a string que parece corresponder ao índice desejado.Portanto, em cordas longas, recomendo usar a
RegExp
versão (acho que em cordas curtas essa eficiência é responsável pela criação doRegExp
objeto)fonte
Use um RegExp:
Ou use
.toLowerCase()
:fonte
No ES2016, você também pode usar o método um pouco melhor / mais fácil / mais elegante (diferencia maiúsculas de minúsculas):
ou (sem distinção entre maiúsculas e minúsculas):
Aqui está uma comparação de
.indexOf()
e.includes()
: https://dev.to/adroitcoder/includes-vs-indexof-in-javascriptfonte
includes
faz distinção entre maiúsculas e minúsculas no Chrome: try'fooBar'.includes('bar')
==>false
Existem algumas abordagens aqui.
Se você deseja executar uma verificação sem distinção entre maiúsculas e minúsculas apenas para esta instância, faça algo como o seguinte.
Como alternativa, se você estiver executando essa verificação regularmente, poderá adicionar um novo
indexOf()
método semelhante aString
, mas torná-lo sem distinção entre maiúsculas e minúsculas.fonte
defineProperty
, eu sugiroObject.defineProperty(String.prototype, 'indexOfInsensitive', {value: function(s,b){return this.toLowerCase().indexOf((s+'').toLowerCase(),b);}});
. Duas atualizações: Conversão explícita de cadeias usando(s+'')
e não enumerável em um loop (for(var i in '') ...
não apareceindexOfInsensitive
.fonte
Você pode tentar isso
fonte
Exemplo para qualquer idioma:
fonte
É 2016 e não há uma maneira clara de como fazer isso? Eu estava esperando um pouco de copypasta. Eu vou tentar.
Notas de design: eu queria minimizar o uso de memória e, portanto, melhorar a velocidade - para que não haja cópia / mutação de strings. Presumo que o V8 (e outros mecanismos) possa otimizar essa função.
Minha razão para o nome:
Por que não...:
toLowerCase()
- possíveis chamadas repetidas para toLowerCase na mesma sequência.RegExp
- estranho procurar com variável. Até o objeto RegExp é estranho, tendo que escapar caracteresfonte
Para fazer uma pesquisa melhor, use o código a seguir,
No primeiro alerta (), o JavaScript retornou "-1" - em outras palavras, indexOf () não encontrou uma correspondência: isso ocorre simplesmente porque "JavaScript" está em minúscula na primeira string e em maiúscula na segunda. Para executar pesquisas que não diferenciam maiúsculas de minúsculas com indexOf (), você pode criar ambas as strings em maiúsculas ou minúsculas. Isso significa que, como no segundo alerta (), o JavaScript verificará apenas a ocorrência da sequência que você está procurando, com letras maiúsculas ignoradas.
Referência, http://freewebdesigntutorials.com/javaScriptTutorials/jsStringObject/indexOfMethod.htm
fonte
Se
referrer
é uma matriz, você pode usarfindIndex()
fonte
Aqui está a minha opinião:
Script :
HTML:
Codepen
fonte