Regexp, caractére autorisé (interdit?) et compagnie

Résolu/Fermé
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 - 2 févr. 2015 à 19:14
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 - 3 févr. 2015 à 02:43
Bonjour à tous,

J'ai pompé ce script sur internet (ou le vilain pas beau), et malheureusement je n'arrive pas à le faire fonctionner comme je le souhaite :


function verif_nombre(champ)
{
var chiffres = new RegExp("[0-9]");
var verif;
var points = 0;

for(x = 0; x < champ.value.length; x++)
{
verif = chiffres.test(champ.value.charAt(x));
if(champ.value.charAt(x) == "."){points++;}
if(points > 1){verif = false; points = 1;}
if(verif == false){champ.value = champ.value.substr(0,x) + champ.value.substr(x+1,champ.value.length-x+1); x--;}
}
}


Dans le formulaire, il y a un "onkeyup='verif_nombre(this)'";

Alors lorsque je rentre un chiffre, il apparait bien,
lorsque je rentre un caractère alphabétique, il est bien supprimé.

SEULEMENT, lorsque je rentre un point ou une virgule, ils sont également supprimé. J'ai bien essayer de bidouiller le RegExp mais le seul résultat que j'ai obtenu et que plus rien ne fonctionne.

En soit, il s'agit d'un champ qui doit contenir un nombre entier/décimal.

Si par ailleurs vous pouvez m'éclairer sur le fonctionnement du regexp, parce que tout les tutos, forum qui en traite ne sont pas super clair (y compris celui du site du zéro sur les expressions régulière)

Vaut mieux t il interdire ou autorisé des caractères ?

Merci par avance de votre aide :)


A voir également:

2 réponses

jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
2 févr. 2015 à 21:28
Bonjour,

testes avec cette REGEX :
var chiffres = new RegExp("^-?\+?\d*(\.\d+)?$");

1
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 150
2 févr. 2015 à 21:39
Merci de votre réponse, malheureusement, ça ne fonctionne pas.
Aucun caractère n'est échappé et j'obtiens dans la console ->
SyntaxError: nothing to repeat

var chiffres = new RegExp("^-?\+?\d*(\.\d+)?$");

Après, c'est ptétre la fonction qui est bancale :S

(comment vous faites pour que votre code soit coloré? Moi aussi je veux être SWAG :D)
0
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 150
Modifié par Exileur le 3/02/2015 à 02:45
Bon, après de longues heures de décorticage de code, je me suis aperçu que le script était à la base utilisé pour vérifier un champ (c'est juste pas marquer en gros dans la fonction).

Qu'il vérifiait un a un tous les caractères de ce champ (pas super utile dans mon cas, faudra que je bidouille) et qu'il supprimé les caractères non voulu.

J'ai donc eu l'idée de rechercher cette fameuse fonction verif_nombre(champ) sur google et en passant de forum en forum j'ai finalement pu trouver la fonction original :
(il faut suivre les commentaires pour obtenir des nombres entier)

function verif_nombre(champ)
{
var chiffres = new RegExp("[0-9\.]"); /* Modifier pour : var chiffres = new RegExp("[0-9]"); */
var verif;
var points = 0; /* Supprimer cette ligne */

for(x = 0; x < champ.value.length; x++)
{
verif = chiffres.test(champ.value.charAt(x));
if(champ.value.charAt(x) == "."){points++;} /* Supprimer cette ligne */
if(points > 1){verif = false; points = 1;} /* Supprimer cette ligne */
if(verif == false){champ.value = champ.value.substr(0,x) + champ.value.substr(x+1,champ.value.length-x+1); x--;}
}

}



Merci encore de votre aide !!

N'oubliez pas de marquez votre post comme résolut lorsque vous avez eu les réponses à vos questions...
Au royaume des aveugles, les borgnes sont rois.
0