RegEx lettre ou . ou -

Fermé
Zyrkon Messages postés 10 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 20 octobre 2013 - Modifié par Zyrkon le 11/10/2013 à 00:52
Zyrkon Messages postés 10 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 20 octobre 2013 - 20 oct. 2013 à 22:05
Salut,

je débute en javascript,

après quelques heures de recherche je n'ai rien trouvé de concluant pour avoir une regex qui me permettrait de valider un champ qui peut contenir:

des lettres (avec ou sans accents peut importe)
des .
des -

autant de fois chacun que désiré peu importe l'ordre

ex: .blabla-bla.blaa--..b ou autre affaire dans ce genre

j'ai trouvé un truc du genre:

([a-zA-Z]|\.|-)*

que j'utilise comme ceci :

function validerAuteur(auteurTester){
var reg3 = new RegExp('([a-zA-Z]|\.|-)*');
return(reg3.test(auteurTester));
}

ceci se retrouve dans un fichier .js

mais lorsque je met 123 par exemple dans le champ Auteur du formulaire ça valide au lieu de bloquer :/

le code de la fonction ou ceci est utilisé:


function valider2() {
var message = "";
var message1 = "";
var message2 = "";
var message3 = "";
var auteurTest = (document.forms[0].auteur.value);
var anneeTest = (document.forms[0].annee.value);
var nbPagesTest = (document.forms[0].nbPages.value);
if ((document.forms[0].titre.value!="") && (document.forms[0].isbn.value!="")){
//vérification de l'auteur, de la date et du nombres de pages
//si auteur pas vide on vérifie le contenu
if (auteurTest != "") {
if (!validerAuteur(auteurTest)){
message1 = "L'auteur ne peut contenir que:";
message1 += "\n\t-des lettres";
mesasge1 += "\n\t-des tirets (-)";
mesasge1 += "\n\t-des points (.)";
} //pas de else, auteur ok
}
//si annee pas vide on vérifie le contenu
if (anneeTest != "") { //ok
//alert(anneeTest);
if (!validerEntier(anneeTest)){
message2 = "L'année doit-être un entier.";
} //pas de else, annee ok
}
//si nbPages pas vide on vérifie le contenu
if (nbPagesTest != "") { //ok
if (!validerEntier(nbPagesTest)){
message3 = "Le nombre de pages doit-être un entier.";
} //pas de else, pages ok
}

} else {
message += "L'ISBN et le titre sont obligatoires";
}

//assembler les messages ici
if (message1 != "") {
message = message1;
}

if (message2 != "") {
if (message != "") {
message += "\n---";
message += "\n" + message2;
} else {
message = message2;
}
}

if (message3 != "") {
if (message != "") {
message += "\n---";
message += "\n" + message3;
} else {
message = message3;
}
}

if (message == "") {
return true;
} else {
alert(message);
return false;
}
}


les autres validations (avec message2 et message3) fonctionnent très bien avec leur propres règles de regex...

aurais-je loupé quelque chose ? merci de votre aide :)
A voir également:

16 réponses

Zyrkon Messages postés 10 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 20 octobre 2013
11 oct. 2013 à 00:50
désolé l'indentation a déconnée oO
0
prosthetiks Messages postés 1189 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 12 juin 2020 431
12 oct. 2013 à 05:26
Regex !! je pend :) réponse dans 15
0
Zyrkon Messages postés 10 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 20 octobre 2013
12 oct. 2013 à 14:52
merci d'avance si tu trouve une solution :)
0
animostab Messages postés 2829 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 11 novembre 2019 737
12 oct. 2013 à 17:43
et pourquoi pas rajouter une condition qui renvoie un texte d'erreur si il y a des chiffre genre == [0-9]*
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zyrkon Messages postés 10 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 20 octobre 2013
12 oct. 2013 à 18:35
parce qu'il ne faut pas qu'il n'y est pas que pas de chiffres :s (pas très clair peut-être ? lol
0
animostab Messages postés 2829 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 11 novembre 2019 737
13 oct. 2013 à 15:25
ou bien peut être un truc du genre
'([a-zA-Z]|\.|-)*' && !([0-9]*) bon je suis pas sur de la syntaxe
0
Zyrkon Messages postés 10 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 20 octobre 2013
13 oct. 2013 à 18:53
bah le truc c'est qu'il ne faut pas de caractères spéciaux

en fait il ne faut que des lettres des . ou des -

:/

ce qui rend cette regex complexe je trouve

on peut aussi y aller en mode combinaison de if et de regex mais j'ai pas trouvé d'algo correct pour :(
0
prosthetiks Messages postés 1189 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 12 juin 2020 431
14 oct. 2013 à 00:48
Hello, voici un pattern qui devrait te convenir:
var pattern = /^[\w\u00E0-\u00FC\.-]+$/i;
0
Zyrkon Messages postés 10 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 20 octobre 2013
14 oct. 2013 à 05:33
je vais testé ça dès que possible :)
0
Zyrkon Messages postés 10 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 20 octobre 2013
Modifié par Zyrkon le 15/10/2013 à 15:58
malheureusement lorsque je met par exemple 123 dans le champ associé, ça valide le formulaire quand même, hors cela ne devrait pas :(

peut-être faudrait-il revoir la façon dont j'utilise cette regex (mais je l'utilise comme les autres..)

exemple pour les autres :

function validerMail(mailTester){
var reg1 = new RegExp('^[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*@[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*[\.]{1}[a-z]{2,6}$', 'i');
return(reg1.test(mailTester));
}

function validerMDP(mdpTester){
var reg2 = new RegExp('^(?=.{6,15}$)(?=.*[0-9])(?=.*[a-zA-Z]).*');
return(reg2.test(mdpTester));
}

peut-être que dans mon code plus haut (dans la première fonction qui utilise l'ensemble) j'ai mal codé quelque chose (assemblage des messages ? vérification des conditions ?) mais cela me semble plutôt correct, au besoin je recolle le code avec indentation ;)
0
prosthetiks Messages postés 1189 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 12 juin 2020 431
17 oct. 2013 à 05:36
Remplace juste le \w par a-zA-Z, de la sorte: var pattern = /^[a-zA-Z\u00E0-\u00FC\.-]+$/i;
0
Zyrkon Messages postés 10 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 20 octobre 2013
17 oct. 2013 à 06:31
J'ai essayer aussi, toujours le même résultat (ça laisse passé 123 dans le champ auteur) :/ ce qui ne devrait pas arriver :/
0
prosthetiks Messages postés 1189 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 12 juin 2020 431
Modifié par prosthetiks le 17/10/2013 à 16:21
chez moi, elle bloque les numériques:


<html>
<head>
<title></title>
<meta charset="utf-8">
</head>
<body>
Pattern: <input type="text" size="30" id="pattern" disabled="disable"><br />
<input type="text" placeholder="chaîne à tester" id="toto">
<button>Test</button>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
var pattern = /^[a-zA-Z\u00E0-\u00FC\.-]+$/i;
$('#pattern').val(pattern);
$('button').click(function(){
var string = $('#toto').val();
var test = new RegExp(pattern);
alert(test.test(string) ? string + ' est valide': string + ' est invalide');
});
</script>
</body>
</html>
0
Zyrkon Messages postés 10 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 20 octobre 2013
18 oct. 2013 à 16:31
Je suis intrigué car cela ne veux vraiment pas fonctionner :/
0
prosthetiks Messages postés 1189 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 12 juin 2020 431
19 oct. 2013 à 02:20
tu peux poster la totalité du script qui ne fonctionne pas stp ?
0
Zyrkon Messages postés 10 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 20 octobre 2013
Modifié par Zyrkon le 20/10/2013 à 22:06
pour info, c'est pour un devoir (que j'ai déjà remis)

je voudrais résoudre le trouble pour mieux comprendre ce qui ne va pas et comment le résoudre si jamais je retombe dans le même genre de problèmes par la suite

Voici le script au complet:

function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}

function getPreferredStyleSheet() {
var i, a;
for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
if(a.getAttribute("rel").indexOf("style") != -1
&& a.getAttribute("rel").indexOf("alt") == -1
&& a.getAttribute("title")
) return a.getAttribute("title");
}
return null;
}

function getActiveStyleSheet() {
var i, a;
for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
if(a.getAttribute("rel").indexOf("style") != -1
&& a.getAttribute("title")
&& !a.disabled) return a.getAttribute("title");
}
return null;
}


function setActiveStyleSheet(title) {
var i, a, main;
for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
if(a.getAttribute("rel").indexOf("style") != -1
&& a.getAttribute("title")) {
a.disabled = true;
if(a.getAttribute("title") == title) a.disabled = false;
}
}
}

function initiate() {
document.getElementById("theme1").style.display="block";
document.getElementById("theme1").style.backgroundColor="#00ff00";
document.getElementById("theme1").style.width="30px";
document.getElementById("theme1").style.textDecoration="none";

document.getElementById("theme2").style.display="block";
document.getElementById("theme2").style.backgroundColor="#000000";
document.getElementById("theme2").style.width="30px";
document.getElementById("theme2").style.textDecoration="none";

document.getElementById("theme1").onclick = function() {
setActiveStyleSheet("theme1");
return false;
}
document.getElementById("theme2").onclick = function() {
setActiveStyleSheet("theme2");
return false;
}

}

//permet d'initialiser certaines fonctionnalité lors du chargement des pages
window.onload = function(e) {
var cookie = readCookie("style");
var title = cookie ? cookie : getPreferredStyleSheet();
setActiveStyleSheet(title);
initiate();

//permet de voir s'il y a le formulaire de login pour appeler la bonne fonction de vérification
var vLogin = document.getElementById("loginForm");
if (vLogin) {
document.forms[0].onsubmit = function() {
return valider1();
}
}
//permet de voir s'il y a le formulaire d'ajout de livre pour appeler la bonne fonction de vérification
var vAjouter = document.getElementById("addBook");
if (vAjouter) {
document.forms[0].onsubmit = function () {
return valider2();
}
}
}

window.onunload = function(e) {
var title = getActiveStyleSheet();
createCookie("style", title, 365);
}

//permet de vérifier le bon format du courriel et du mot de passe lors de l'envoi du formulaire
function valider1() { //fonctionne

var message = "";
//on vérifie s'ils sont vides
if ((document.forms[0].numid.value!="") && (document.forms[0].mdp.value!="")){
//variables pour la vérification par les fonctions
var idTest = (document.forms[0].numid.value);
var mdpTest = (document.forms[0].mdp.value);
//pas vides alors on vérifie le courriel
if (validerMail(idTest)){
//on vérifie le mot de passe
if (!validerMDP(mdpTest)){
//mdp incorrect, on contruit le message d'erreur
message += "Mot de passe invalide!";
message += "\n\nLe mot de passe doit respecter les règles suivantes:";
message += "\n\t-6 caractères minimum";
message += "\n\t-15 caractères maximum";
message += "\n\t-contenir au moins un chiffre";
message += "\n\t-contenir au moins une lettre";
} //pas de else, tout est bon
} else { //l'id est incorrect
message += "L'ID doit-être un courriel valide.";
message += "\n\nExemple:";
message += "\n\n\texemple@domain.com";
}
} else { //le numId et/ou le mdp est vide, on construit le message d'erreur
message += "Le numéro d'ID et le mot de passe sont obligatoires";
}

//vérification des messages pour voir s'il y a des erreurs et donc envoyer le formulaire ou non
if (message == "") {
return true;
} else {
alert(message);
return false;
}
}

//permet de vérifier le bon format de certains des champs du formulaire d'ajout d'un livre
function valider2() {
//variables d'usage pour vérifications diverses:
//pour les messages d'erreurs
var message = "";
var message1 = "";
var message2 = "";
var message3 = "";
//pour les contenu à vérifier
var auteurTest = (document.forms[0].auteur.value);
var anneeTest = (document.forms[0].annee.value);
var nbPagesTest = (document.forms[0].nbPages.value);
//on vérifie s'ils sont vides (pour le titre et l'isbn obligatoire)
if ((document.forms[0].titre.value!="") && (document.forms[0].isbn.value!="")){
//pas vides donc vérification de l'auteur, de la date et du nombres de pages.
//si auteur pas vide on vérifie le contenu
if (auteurTest != "") {
if (!validerAuteur(auteurTest)){ //la regex associée ne fonctionne pas, voir plus bas
//contenu incorrect, on construit le message d'erreur
message1 = "L'auteur ne peut contenir que:";
message1 += "\n\t-des lettres";
mesasge1 += "\n\t-des tirets (-)";
mesasge1 += "\n\t-des points (.)";
} //pas de else, auteur ok
}
//si annee pas vide on vérifie le contenu
if (anneeTest != "") {
if (!validerEntier(anneeTest)){
message2 = "L'année doit-être un entier.";
} //pas de else, annee ok
}
//si nbPages pas vide on vérifie le contenu
if (nbPagesTest != "") {
if (!validerEntier(nbPagesTest)){
message3 = "Le nombre de pages doit-être un entier.";
} //pas de else, pages ok
}

} else { // l'isbn et/ou le titre est vide, on construit le message d'erreur
message += "L'ISBN et le titre sont obligatoires";
}

//assemblage des messages ici pour avoir qu'une seule alerte qui rassemble tout
if (message1 != "") {
message = message1;
}

if (message2 != "") {
if (message != "") {
message += "\n---";
message += "\n" + message2;
} else {
message = message2;
}
}

if (message3 != "") {
if (message != "") {
message += "\n---";
message += "\n" + message3;
} else {
message = message3;
}
}

if (message == "") {
return true;
} else {
alert(message);
return false;
}
}

//permet de vérifier le format d'un courriel
function validerMail(mailTester){ //fonctionne
var reg1 = new RegExp('^[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*@[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*[\.]{1}[a-z]{2,6}$', 'i');
return(reg1.test(mailTester));
}

//permet de vérifier le format du contenu du mot de passe
function validerMDP(mdpTester){
var reg2 = new RegExp('^(?=.{6,15}$)(?=.*[0-9])(?=.*[a-zA-Z]).*');
return(reg2.test(mdpTester));
}

//permet de vérifier le format du contenu de l'auteur
function validerAuteur(auteurTester){ //aucune regex trouvées pour ça, voici quelques exemples possibles mais aucuns ne fonctionnent correctement
//var reg3 = new RegExp('/^[a-zA-Z\u00E0-\u00FC\.-]'.'i');
var reg3 = new RegExp('([a-zA-Z]|\.|-)*');
//var reg3 = new RegExp('/^[\w\u00E0-\u00FC\.-]','$/i');
//var reg3 = /^[\w\u00E0-\u00FC\.-]+$/i;
//var reg3 = new RegExp(/[^a-z|\.|\-]/i);
return(reg3.test(auteurTester));
}

//permet de vérifier le format d'un entier
function validerEntier(entierTester){
var reg4 = new RegExp('^[0-9]+$');
return(reg4.test(entierTester));
}

0