Como saber se uma string contém um determinado caractere em JavaScript?


335

Eu tenho uma página com uma caixa de texto em que um usuário deve digitar um código de registro de 24 caracteres (letras e números, sem distinção entre maiúsculas e minúsculas). Eu costumava maxlengthlimitar o usuário a inserir 24 caracteres.

Os códigos de registro geralmente são dados como grupos de caracteres separados por hífens, mas eu gostaria que o usuário inserisse os códigos sem os hífens.

Como posso escrever meu código JavaScript sem jQuery para verificar se uma determinada sequência que o usuário digita não contém hífens, ou melhor ainda, contém apenas caracteres alfanuméricos?


2
A resposta encontrada aqui stackoverflow.com/questions/3192612 possui as informações sobre como validar no alfanumérico.
amigos estão dizendo sobre jascav

1
E para aprender expressões regulares
Felix Kling

Para você, pessoal do jquery, você deve e pode usar inArray.
Jonh

3
Como a entrada é formatada não é um problema humano. É o problema do computador. Faça o que o usuário digitar e remova todos os caracteres que não pertencem (não-alfa), teste para ver se o resultado possui 24 caracteres e valide-o. O usuário realmente odeia entrada formatada.
Tggagne 19/10/2013

Respostas:


592

Para encontrar "olá" em your_string

if (your_string.indexOf('hello') > -1)
{
  alert("hello found inside your_string");
}

Para o alfanumérico, você pode usar uma expressão regular:

http://www.regular-expressions.info/javascript.html

Expressão regular alfanumérica


Isso foi bastante útil. Falando como programador python, estou usando isso para substituir a palavra-chave "in" (que pode ou não ser pouco ortodoxa, não tenho certeza), mas funciona para mais do que apenas um caractere.
trevorKirkby

1
Não entendo como isso foi votado na resposta. Vejo que muitas pessoas vêm aqui pesquisando no Google. Uma maneira melhor definitivamente seria usar uma expressão regular.
Spock

25
Você usaria uma expressão regular para procurar um único caractere? Essa é uma quantidade excessiva de sobrecarga para obter exatamente a mesma coisa que a função integrada faz. Muitas pessoas não entendem o regex e, geralmente, a resposta mais simples é a melhor.
kemiller2002

Eu iria com /hello/g.test(your_string). Enquanto indexOf funciona, acho que um teste de regex conta uma história melhor do que você está tentando realizar. Se estou tentando encontrar uma sequência de caracteres dentro de uma string, o índice é irrelevante.
Joe Maffei


69

Com ES6 .includes ()

"FooBar".includes("oo"); // true

"FooBar".includes("foo"); // false

"FooBar".includes("oo", 2); // false

E: Não suportado pelo IE - você pode usar o operador Tilde ~( Bitwise NOT ) com .indexOf ()

~"FooBar".indexOf("oo"); // -2 -> true

~"FooBar".indexOf("foo"); // 0 -> false

~"FooBar".indexOf("oo", 2); // 0 -> false

Usado com um número, o operador Tilde efetivamente faz ~N => -(N+1). Use-o com dupla negação !!( Logical NOT ) para converter os números em bools:

!!~"FooBar".indexOf("oo"); // true

!!~"FooBar".indexOf("foo"); // false

!!~"FooBar".indexOf("oo", 2); // false

Simples, legível e retorna um booleano. Perfeito para quando você não precisa de uma expressão regular.
Bryanbraun # 14/17

1
** Observe que o método includes não é suportado pelo IE ** #
Bonez024

52

Se você tiver o texto na variável foo:

if (! /^[a-zA-Z0-9]+$/.test(foo)) {
    // Validation failed
}

Isso irá testar e certificar-se de que o usuário inseriu pelo menos um caractere, e entrou apenas caracteres alfanuméricos.


A melhor resposta aqui, todas as outras respostas são nulas do meu pov.
Chris_r # 15/19


11

O ES6 contém o método embutido ( includes) em String prototype, que pode ser usado para verificar se a string contém outra ou não.

var str = 'To be, or not to be, that is the question.';

console.log(str.includes('To be')); 

O polyfill a seguir pode ser usado para adicionar esse método em navegadores não suportados. ( Fonte )

if (!String.prototype.includes) {
  String.prototype.includes = function(search, start) {
    'use strict';
    if (typeof start !== 'number') {
      start = 0;
    }
    
    if (start + search.length > this.length) {
      return false;
    } else {
      return this.indexOf(search, start) !== -1;
    }
  };
}


7

Use uma expressão regular para fazer isso.

function isAlphanumeric( str ) {
 return /^[0-9a-zA-Z]+$/.test(str);
}

Isso verificará exatamente um dígito e não aceitará todos os caracteres alfanuméricos, conforme desejado pelo OP.
cdhowie

@cdhowie .. esqueci um +, mas eu tinha interpretado mal a pergunta também .. obrigado por apontar.
Gabriele Petrioli

6

Vocês todos estão pensando demais. Basta usar uma expressão regular simples, é seu melhor amigo.

var string1 = "Hi Stack Overflow. I like to eat pizza."
var string2 = "Damn, I fail."

var regex = /(pizza)/g // Insert whatever phrase or character you want to find

string1.test(regex); // => true
string2.test(regex); // => false

Aprenda Regex em 5 minutos?


Para fazer algo prático com isso, basta executá-lo em uma seleção:if ( string1.test(regex) ) { alert("He likes pizza!"); }
Adam McArthur

E seu teste alfanumérico seria ...var regex = /^[a-z0-9]+$/i
Adam McArthur

4
Isso é ao contrário. Veja developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/… regexObj.test (str)
Ralph Yozzo 02 /

Para trás? regex.test(string1)
HLCS

Seus métodos de exemplo são invertidos. Deveria ser regex.test(str). ( str.match(regex)É semelhante, mas não retorna um boolean.)
jsejcksn

6

Se você estiver procurando por caracteres no início ou no final da string, também poderá usar startsWitheendsWith

const country = "pakistan";
country.startsWith('p'); // true
country.endsWith('n');  // true

5

var inputString = "this is home";
var findme = "home";

if ( inputString.indexOf(findme) > -1 ) {
    alert( "found it" );
} else {
    alert( "not found" );
}


4

Para testar apenas caracteres alfanuméricos:

if (/^[0-9A-Za-z]+$/.test(yourString))
{
    //there are only alphanumeric characters
}
else
{
    //it contains other characters
}

O regex está testando 1 ou mais (+) do conjunto de caracteres 0-9, AZ e az, começando com o início da entrada (^) e parando com o final da entrada ($).


4

A resposta de Kevins está correta, mas requer um número "mágico" da seguinte maneira:

var containsChar = s.indexOf(somechar) !== -1;

Nesse caso, você precisa saber que -1 significa não encontrado . Eu acho que uma versão um pouco melhor seria:

var containsChar = s.indexOf(somechar) >= 0;

Bem, de acordo com os padrões original , atual e de rascunho , indexOf()retornará -1 se a sequência não for encontrada. Portanto, é dificilmente mais mágico do que usar 0 .
Todos os trabalhadores têm Essencial

3

Tente o seguinte:

if ('Hello, World!'.indexOf('orl') !== -1)
    alert("The string 'Hello World' contains the substring 'orl'!");
else
    alert("The string 'Hello World' does not contain the substring 'orl'!");

Aqui está um exemplo: http://jsfiddle.net/oliverni/cb8xw/


3

A função de pesquisa de string também é útil. Ele procura por um caractere e uma sub_string em uma determinada string.

'apple'.search('pl') retorna 2

'apple'.search('x') Retorna -1


2

Se você estiver lendo dados do DOM, como a tag ap ou h1, por exemplo, desejará usar duas funções JavaScript nativas, isso é fácil, mas limitado ao es6, pelo menos para a solução que vou fornecer. Vou procurar todas as tags p no DOM, se o texto contiver um "T", o parágrafo inteiro será removido. Espero que este pequeno exemplo ajude alguém!

HTML

<p>Text you need to read one</p>
<p>Text you need to read two</p>
<p>Text you need to read three</p>

JS

let paras = document.querySelectorAll('p');

paras.forEach(p => {
  if(p.textContent.includes('T')){
       p.remove();
    } 
});

1

Funcionando perfeitamente. Este exemplo ajudará muito.

<script>    
    function check()
    {
       var val = frm1.uname.value;
       //alert(val);
       if (val.indexOf("@") > 0)
       {
          alert ("email");
          document.getElementById('isEmail1').value = true;
          //alert( document.getElementById('isEmail1').value);
       }else {
          alert("usernam");
          document.getElementById('isEmail1').value = false;
          //alert( document.getElementById('isEmail1').value);
       }
    }
</script>

<body>
    <h1>My form </h1>
    <form action="v1.0/user/login" method="post" id = "frm1">
        <p>
            UserName : <input type="text" id = "uname" name="username" />
        </p>
        <p>
            Password : <input type="text" name="password" />
        </p>
        <p>
            <input type="hidden" class="email" id = "isEmail1" name = "isEmail"/>
        </p>
        <input type="submit" id = "submit" value="Add User" onclick="return check();"/>
    </form>
</body>

0

Demonstração: O método include () encontra o caractere "contains" em toda a string, retornando um true.

var string = "This is a tutsmake.com and this tutorial contains javascript include() method examples."

str.includes("contains");

//The output of this

  true


0

Verifique se a sequência é alfanumérica ou alfanumérica + alguns caracteres permitidos

O método alfanumérico mais rápido provavelmente é mencionado em: Melhor maneira de verificar alfanumérico em Javascript , pois opera diretamente em intervalos de números.

Em seguida, para permitir alguns outros caracteres extras com segurança, basta colocá-los em umaSet pesquisa rápida.

Acredito que esta implementação lidará com pares substitutos corretamente corretamente.

#!/usr/bin/env node

const assert = require('assert');

const char_is_alphanumeric = function(c) {
  let code = c.codePointAt(0);
  return (
    // 0-9
    (code > 47 && code < 58) ||
    // A-Z
    (code > 64 && code < 91) ||
    // a-z
    (code > 96 && code < 123)
  )
}

const is_alphanumeric = function (str) {
  for (let c of str) {
    if (!char_is_alphanumeric(c)) {
      return false;
    }
  }
  return true;
};

// Arbitrarily defined as alphanumeric or '-' or '_'.
const is_almost_alphanumeric = function (str) {
  for (let c of str) {
    if (
      !char_is_alphanumeric(c) &&
      !is_almost_alphanumeric.almost_chars.has(c)
    ) {
      return false;
    }
  }
  return true;
};
is_almost_alphanumeric.almost_chars = new Set(['-', '_']);

assert( is_alphanumeric('aB0'));
assert(!is_alphanumeric('aB0_-'));
assert(!is_alphanumeric('aB0_-*'));
assert(!is_alphanumeric('你好'));

assert( is_almost_alphanumeric('aB0'));
assert( is_almost_alphanumeric('aB0_-'));
assert(!is_almost_alphanumeric('aB0_-*'));
assert(!is_almost_alphanumeric('你好'));

GitHub upstream .

Testado no Node.js v10.15.1.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.