J'essaie de valider un nom avec l'expression régulière, l'expression régulière empêche l'utilisateur d'entrer 2 espaces ou points d'affilée.

Voici mon code:

function test(input) {
  var regex = /^[A-Za-z]+\.{0,1}\s{0,1}$/;
  input.value = input.value.replace(regex, "");
}
<input id="txt_NomCandidato" onkeyup="test(this);" type="text" class="form-control" name="txt_Nom">

Pour le moment, je veux entrer une lettre, je ne peux pas savoir pourquoi, j'espère que vous pourrez m'aider.

EDIT: Le nom ne contient que des lettres, pas des chiffres.

2
Yoset GA 12 avril 2018 à 18:41

6 réponses

Meilleure réponse

Le regex suivant devrait fonctionner pour vous: /[^a-zA-Z. ]|\.(?=\.)|\s(?=\s)/g

  • [^a-zA-Z. ]+ Limite tous les caractères autorisés à a-z, A-Z, points ou espaces
  • \.(?=\.) Le limite pour n'autoriser qu'un seul point de suite
  • \s(?=\s) Le limite à un seul espace de suite

Chacun de ceux-ci est séparé par | (la ou condition)

function test(input) {
  var regex = /[^a-zA-Z. ]|\.(?=\.)|\s(?=\s)/g;
  input.value = input.value.replace(regex, "");
}
<input id="txt_NomCandidato" onkeyup="test(this);" type="text" class="form-control" name="txt_Nom">
1
Josh Mein 12 avril 2018 à 16:51

Cette expression régulière ne leur permettra pas d'entrer dans deux périodes ou deux espaces, lorsqu'ils entreront dans la seconde de l'une ou l'autre, elle disparaîtra.

function test(input){
  var regex=/\.{2}| {2}/;
  input.value = input.value.replace(regex, "").replace(/\d+|/g, '').replace(/\s+/g, ' ').replace(/[^\w]/, '');
}
<input id="txt_NomCandidato" onkeyup="test(this);" type="text" class="form-control" name="txt_Nom">
1
Scath 12 avril 2018 à 16:32

Votre expression rationnelle semble correcte (elle correspond à n'importe quelle chaîne avec pas plus de 1 espace ou 1 point ensemble), mais votre logique dans votre fonction semble erronée.

Ce qu'il fait: chaque fois que la valeur change, prenez la valeur et remplacez tout ce qui correspond à cette expression régulière par une chaîne vide, donc chaque fois que vous écrivez un caractère, il est remplacé (car il correspond à l'expression régulière).

J'irais avec l'une de ces options:

A) afficher un message si la valeur ne correspond pas à l'expression régulière

B) changez l'expression régulière en /. {2} | {2} / et ne remplacez que les deux points ou les deux espaces, comme le dit Scath dans une autre réponse

C) il suffit peut-être d’utiliser l’attribut de modèle d’entrée avec votre expression régulière originale: https: // www. w3schools.com/TAGS/att_input_pattern.asp

J'espère que cela t'aides!

1
Javier Gbas 12 avril 2018 à 15:54

Avec cette solution, il supprime uniquement le deuxième espace ou le deuxième point et les premiers resteront toujours:

function test(input){
  var regex=/\.(?=\.)|\s(?=\s)/;
  input.value = input.value.replace(regex, "");
}
<input id="txt_NomCandidato" onkeyup="test(this);" type="text" class="form-control" name="txt_Nom">
2
Deathshadow 12 avril 2018 à 15:54

C'est parce que vous faites correspondre [A-Za-z]+ qui correspondra à un ou plusieurs caractères et tout ce qui suit est facultatif.

Votre expression régulière correspondrait.

  • [A-Za-z]+ Faites correspondre un ou plusieurs caractères
  • \.{0,1} Correspond au point facultatif (0 ou 1 fois)
  • \s{0,1} correspond au caractère d'espacement facultatif (0 ou 1 fois)

Ce qui correspondra à a et ensuite vous ferez le remplacement.

Pour rendre quelque chose facultatif, vous pouvez également utiliser un point d'interrogation ?

Pour autoriser uniquement les caractères, un seul espace ou un seul point, vous pouvez remplacer tout ce qui ne correspond pas à ces critères:

([. ])(?=\1)|[^a-zA-Z. ]

function test(input) {
  var regex = /([. ])(?=\1)|[^a-zA-Z. ]/;
  input.value = input.value.replace(regex, "");
}
<form id="" name="">
  <input id="txt_NomCandidato" onkeyup="test(this);" type="text" class="form-control" name="txt_Nom">
</form>

Pour faire correspondre un point suivi d'un point ou d'un espace blanc suivi d'un espace blanc, vous pouvez capturer un point ou un espace blanc dans un groupe et il correspondra s'il est suivi de ce qui est capturé dans le groupe en utilisant un lookahead.

([. ])(?=\1)

1
The fourth bird 12 avril 2018 à 16:57

Pour obtenir le résultat attendu, utilisez l'option ci-dessous de tranche

Input.value.slice (-2) renverra les deux derniers caractères saisis et s'il s'agit de ".." ou "" (espaces doubles), remplacez-le par ''

function test(input){
  if(input.value.slice(-2)=='..' || input.value.slice(-2)=='  '){
         input.value = input.value.replace(input.value.slice(-2), "");
     }
}
<input id="txt_NomCandidato" onkeyup="test(this);" type="text" class="form-control" name="txt_Nom">

Exemple de code - https://codepen.io/nagasai/pen/VXNOej

Votre expression régulière efface tous les caractères commence par [A-Z] ou [a-z] en raison de l'expression ^ [A-Za-z]

1
Naga Sai A 12 avril 2018 à 15:55