2010-12-14 24 views
206

J'ai une page avec une zone de texte où un utilisateur est censé saisir un code d'enregistrement de 24 caractères (lettres et chiffres, insensible à la casse). J'ai utilisé maxlength pour limiter l'utilisateur à entrer 24 caractères.Comment savoir si une chaîne contient un certain caractère dans JavaScript?

Les codes d'enregistrement sont généralement donnés sous la forme de groupes de caractères séparés par des tirets, mais je voudrais 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 étant donné que les entrées de l'utilisateur ne contient pas de tirets, ou mieux encore, ne contient que des caractères alphanumériques?

+1

La réponse trouvée ici http://stackoverflow.com/questions/3192612 a des informations sur la façon de valider sur alphanumérique. – JasCav

+1

Et pour apprendre des expressions régulières: http://www.regular-expressions.info –

+0

Pour vous les gens jquery vous devriez et pourriez utiliser 'inArray'. – JonH

Répondre

418

Pour trouver "bonjour" 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

Alpha Numeric Regular Expression

+0

C'était très utile. Parlant en tant que programmeur python, j'utilise cela pour remplacer le mot clé "in" (qui peut être ou ne pas être orthodoxe, je ne suis pas sûr), mais cela fonctionne pour plus d'un seul caractère. –

+0

Je ne comprends pas comment cela a été voté à la réponse. Je peux voir que beaucoup de gens viennent ici par Google. Une meilleure façon serait certainement d'utiliser une expression régulière. – Spock

+17

Vous utiliseriez une expression régulière pour rechercher un seul caractère? C'est une quantité excessive de frais généraux pour obtenir exactement la même chose que la fonction intégrée. Il y a beaucoup de gens qui ne comprennent pas regex, et généralement la réponse la plus simple est la meilleure. – kemiller2002

29

Si vous avez le texte dans la variable foo:

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

Ceci vérifiera et s'assurera que l'utilisateur a entré au moins un caractère, et a entré seulement caractères alphanumériques.

5

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

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

Cela vérifiera exactement * un * chiffre, et n'acceptera pas tous les caractères alphanumériques, comme le souhaite l'OP. – cdhowie

+0

@cdhowie .. oublié un +, mais j'avais mal lu la question aussi .. merci de souligner. –

2

Pour tester des caractères alphanumériques:

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

Le regex teste pour 1 ou plus (+) de l'ensemble des caractères 0-9, AZ et az, en commençant par le début d'entrée (^) et s'arrêtant à la fin de l'entrée ($).

17

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

if ("write something here".indexOf("write som") > -1) { alert("found it"); } 
+0

Est-ce que ça marche sur IE? -> http://stackoverflow.com/questions/3480771/jquery-how-to-see-if-string-contains-substring –

-1

travail perfectly.This exmple 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> 
1

Essayez ceci:

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/

4

Vous êtes tous penser trop dur. 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 

Learn Regex in 5 minutes?

+0

Donc, pour faire quelque chose de pratique avec ça, vous feriez simplement lancez-le dans une sélection: 'if (string1.test (regex)) {alert (" Il aime la pizza! "); } ' –

+0

Et votre test alphanumérique serait ...' var regex =/^ [a-z0-9] + $/i' –

+1

Ceci est en arrière. Voir https: //developer.mozilla.org/fr-fr/docs/Web/JavaScript/Références/Global_Objects/RegExp/test regexObj.test (str) –

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

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

fonction de recherche de chaîne est trop utile. Il recherche un caractère ainsi qu'une sous-chaîne dans une chaîne donnée.

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

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

-1

Kevins réponse est correcte, mais il faut un certain nombre "magique" comme suit: var = containsChar s.indexOf (de somechar) == -1; Dans ce cas, vous devez savoir que -1 signifie pas trouvé. Je pense qu'une version un peu meilleure serait: var contientChar = s.indexOf (somechar)> = 0;

+0

Eh bien, selon le [original] (http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%201st%20edition,%20June % 201997.pdf # page = 83), [actuel] (http://www.ecma-international.org/ecma-262/6.0/#sec-string.prototype.indexof), et [draft] (https://tc39.github.io/ecma262/#sec-string.prototype.indexof) standards, 'indexOf()' retournera * -1 * si la chaîne n'est pas trouvée. Donc, ce n'est guère plus * magique * que d'utiliser * 0 *. – cpburnz

-4
var emailID=document.getElementById("emailField").value; 
    if(!emailID.contains("@")) 
    { 
     alert("Wrong EmailID"); 
    } 
+1

Les chaînes n'ont pas de méthode 'contains()'. – cpburnz

12

Avec ES6 includes

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

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

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

Simple, lisible et renvoie un booléen. Parfait pour quand vous n'avez pas besoin d'une expression régulière. – bryanbraun

3

ES6 contient la méthode intégrée (includes) dans la chaîne de prototype, qui peut être utilisé pour 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; 
 
    } 
 
    }; 
 
}