web-dev-qa-db-fra.com

Comment savoir si une chaîne contient un certain caractère en JavaScript?

J'ai une page avec une zone de texte où un utilisateur est supposé entrer un code d'enregistrement de 24 caractères (lettres et chiffres, insensible à la casse). J'ai utilisé maxlength pour limiter l'utilisateur à 24 caractères.

Les codes d'enregistrement sont généralement donnés sous forme de groupes de caractères séparés par des tirets, mais j'aimerais que l'utilisateur entre les codes sans les tirets.

Comment puis-je écrire mon code JavaScript sans jQuery pour vérifier qu'une chaîne donnée saisie par l'utilisateur ne contient pas de tirets ou, mieux, ne contient que des caractères alphanumériques?

279

Pour trouver "hello" dans your_string

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

Pour l'alpha numérique, vous pouvez utiliser une expression régulière:

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

Expression régulière alphanumérique

531
kemiller2002

Avec ES6 . Includes ()

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

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

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

E: Non supporté par IE - vous pouvez utiliser à la place l'opérateur Tilde ~ ( bitwise NOT ) avec . IndexOf ()

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

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

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

Utilisé avec un numéro, l'opérateur Tilde est effectif à ~N => -(N+1). Utilisez-le avec la double négation !! ( Logical NOT ) pour convertir les nombres en bools:

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

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

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

Si vous avez le texte dans la variable foo:

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

Ceci testera et s'assurera que l'utilisateur a entré au moins un caractère et qu'il a entré seulement caractères alphanumériques.

45
cdhowie

vérifie si la chaîne (mot/phrase ...) contient un mot/caractère spécifique

if ( "write something here".indexOf("write som") > -1 )  { alert( "found it" );  } 
17
T.Todua

ES6 contient une méthode intégrée ( includes ) dans la chaîne prototype de String, qui permet de vérifier si la chaîne contient une autre chaîne ou non.

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

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

Après polyfill peut être utilisé pour ajouter cette méthode dans les navigateurs non pris en charge. ( Source )

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
Vipin Kumar

Utilisez une expression régulière pour accomplir cela.

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

Vous pensez tous trop fort. Utilisez simplement une simple expression régulière, c’est votre meilleur ami.

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

Apprendre Regex en 5 minutes?

5
Adam McArthur
var inputString = "this is home";
var findme = "home";

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

La réponse de Kevins est correcte mais nécessite un numéro "magique" comme suit:

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

Dans ce cas, vous devez savoir que - 1 signifie non trouvé . Je pense qu'une version un peu meilleure serait:

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

Pour tester uniquement les caractères alphanumériques:

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

La regex teste 1 ou plusieurs (+) des jeux de caractères 0 à 9, AZ et a-z, en commençant par le début de l'entrée (^) et en s'arrêtant avec la fin de l'entrée ($).

3
fairfieldt

Si vous recherchez un ou plusieurs caractères au début ou à la fin de la chaîne, vous pouvez également utiliser startsWithet endsWithname__

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

La fonction de recherche de String est également utile. Il recherche un caractère aussi bien qu'une chaîne secondaire dans une chaîne donnée.

'Apple'.search('pl') renvoie 2

'Apple'.search('x') return -1

2
learner010

Essaye ça:

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'!");

Voici un exemple: http://jsfiddle.net/oliverni/cb8xw/

2
Oliver Ni

Si vous lisez des données à partir du DOM, comme une balise p ou h1, par exemple, vous voudrez utiliser deux fonctions JavaScript natives, cela est assez simple mais limité à es6, du moins pour la solution que je vais fournir. Je vais rechercher toutes les balises p dans le DOM, si le texte contient un "T", le paragraphe entier sera supprimé. J'espère que ce petit exemple aide quelqu'un!

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
Der Deutsche

Fonctionne parfaitement. Cet exemple aidera beaucoup.

<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
MankitaP