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?
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:
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
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.
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" ); }
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;
}
};
}
Utilisez une expression régulière pour accomplir cela.
function isAlphanumeric( str ) {
return /^[0-9a-zA-Z]+$/.test(str);
}
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
var inputString = "this is home";
var findme = "home";
if ( inputString.indexOf(findme) > -1 ) {
alert( "found it" );
} else {
alert( "not found" );
}
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;
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 ($).
Si vous recherchez un ou plusieurs caractères au début ou à la fin de la chaîne, vous pouvez également utiliser startsWith
et endsWith
name__
const country = "pakistan";
country.startsWith('p'); // true
country.endsWith('n'); // true
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
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/
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();
}
});
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>