Page 1 sur 2

Une 'tite RegExp...

Posté : 07 oct. 2006, 18:03
par albat
Bonjour,

Sans pourtant y être réfractaire, je fuis les RegExp comme la peste.
La cause : je n'ai pas trouvé le temps d'étudier ça soigneusement. 8-[
Il faudrait - et j'en ai d'ailleurs envie - m'y mettre sérieusement...
(mais pas aujourd'hui, j'suis charette !) :roll:

Mais là, je n'ai pas d'alternative aux RegExp. En tout cas, je n'en vois pas.
Voilà pourquoi j'appelle à l'aide...
Ne m'accablez pas ; j'ai déjà assez honte comme ça... :oops:
Dans un formulaire, j'ai un champ de saisie pour le numéro de téléphone.
Je souhaite, au moyen d'un JS, retirer les éventuels . / - et espaces contenus dans le numéros saisi.

À cet effet, j'ai écrit le script suivant. Efficace, certes, mais bien peu élégant...

Code : Tout sélectionner

function format_telephone(tel) { // ... while (tel.indexOf(" ",0)>-1) tel = tel.replace(" ", ""); while (tel.indexOf(".",0)>-1) tel = tel.replace(".", ""); while (tel.indexOf("-",0)>-1) tel = tel.replace("-", ""); while (tel.indexOf("/",0)>-1) tel = tel.replace("/", ""); return tel; }
ze quouechtieunnes are :
  • Comment rendre cela plus léger avec des RegExp ?
  • Comment interdire en fait tout caractère autre qu'un chiffre ?
Merci, merci ! :merci:

Posté : 07 oct. 2006, 18:16
par momox
Je vois a peu près le masque que je mettrais en php mais en javascript, je pense pas que ce soit la même chose...
@+

Posté : 07 oct. 2006, 18:25
par albat
[0-9] ?

Posté : 07 oct. 2006, 18:48
par momox
Oui , on peut dire ca comme ca.
Mais pour ma part, je ferais une detection a l'aide du masque [a-z] et si ca renvoie true, alors erreur :)
@+

Posté : 07 oct. 2006, 18:57
par albat
Je me suis mal fait comprendre. :?

Le but n'est pas de vérifier la validité ddu format du numéro saisi (pour cela, le PHP conviendrait très bien),
mais de le corriger en temps réel côté client avant submit du formulaire (d'où l'utilisation du javascript).

Je ne cherche donc pas à vérifier que la donnée saisie correspond au modèle [0-9]
mais à purger de la chaîne saisie, tout caractère autre ; cad tel que : a-z, A-Z, "/", ".", "-", [espace], etc.

Et là, je cale.

Posté : 07 oct. 2006, 19:08
par momox
Il y a peut-être un équivalent du str_replace en javascript?
@+

Posté : 07 oct. 2006, 19:49
par Cyrano
Petite proposition basique, supprimer tout ce qui n'est pas un chiffre :
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<!-- Date de création: 07/10/2006 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Formater un numéro de téléphone</title>
<meta http-equiv="Content-language" content="FR-fr" xml:lang="fr" dir="ltr" />
<script type="text/javascript">
/* <![CDATA[ */
function validtel(num)
{
    var longueur = num.length;
    var chiffres = '0123456789';
    var nettoyage = '';
    var caractere;
    for(var i = 0; i < longueur; i++)
    {
        caractere = num.charAt(i);
        if(chiffres.indexOf(caractere) != -1)
        {
            nettoyage += caractere;
        }
    }
    document.forms['numtelform'].elements['numtel'].value = nettoyage;
}
/* ]]> */
</script>
</head>
<body>
<p>Formater un numéro de téléphone en supprimant tout ce qui n'est pas un chiffre.</p>
<form action="#" method="post" id="numtelform">
  <fieldset>
    <label><input type="text" name="numtel" id="numtel" value="" onblur="validtel(this.value);" /></label><br />
    <input type="submit" name="envoi" value="Enregistrer" />
  </fieldset>
</form>
</body>
</html>
Éventuellement tu peux rajouter une validation pour tester la longueur ou vérifier qu'il s'agit bien d'un numéro de téléphone.

Posté : 07 oct. 2006, 20:43
par albat
Ton Javascript fonctionne impeccablement ! =D>
(Rhâââ la la... Il est fort, ce Cyrano !) :langue:

Pour la validation, je le fais en PHP.
Après submit() du formulaire donc.

Ce que je voulais, c'était apurer en temps réel (pendant la saisie),
le numéro de tous les caractères parasites.

C'est exactement ce que j'obtiens.
Merci ! :agenouille:

You know what ? I'm happy. ;)

Posté : 07 oct. 2006, 20:44
par Truc
Tu peux explorer la fonction isNaN() qui détecte si le paramètre passé est un chiffre ou pas.
Détection à la volée :
function chiffre(evenement)
{	
	var touche = window.event ? evenement.keyCode : evenement.which;		
	touche = (touche == 8) ? 1 : !isNaN(String.fromCharCode(touche));			
	return touche;
}
la touche "8" pour pouvoir effacer :)
<input type="text" value="" name="champ" onkeypress="return chiffre(event);">

Posté : 07 oct. 2006, 20:48
par albat
C'est une autre possibilité et une bonne idée.

Mais le risque est que cela perturbe l'utilisateur
qui ne comprend pas pourquoi tel caractère (prohibé) ne s'affiche pas
et qui, dans le meilleur des cas, explose son clavier après l'avoir martelé comme un sourd
et dans le pire, formate sa bécane, persuadé d'avoir chopé un virus... :shock: #-o
(Ne riez pas : je parle d'expérience)
la touche "8" pour pouvoir effacer :)
Là, en revanche, je suis moins séduit.
Ça va pas être évident pour les utilisateurs dont le numéro contient un ou plusieurs 8... :langue:

Posté : 07 oct. 2006, 20:56
par Truc
formate sa bécane, persuadé d'avoir chopé un virus... :shock: #-o
(Ne riez pas : je parle d'expérience)

:lol:.... Trop tard j'ai ri
Il faut penser à tout avec ces "utilisateurs" :?
la touche "8" pour pouvoir effacer :)
Là, en revanche, je suis moins séduit.
Le code touche "8" qui correspond à la touche "Effacement" (retour arrière :-k) :wink:

Posté : 07 oct. 2006, 21:01
par albat
Le code touche "8" qui correspond à la touche "Effacement" (retour arrière :-k) :wink:
Faut pas m'en vouloir : j'ai commencé comme utilisateur.

Alors, forcément, parfois, j'ai des restes... :lol:

Posté : 10 oct. 2006, 11:43
par RilaX
Salut,
ce petit bout de code de Truc est vraiment super !

Par contre, sans vouloir abuser, j'aimerai qu'il soit possible de tabuler pour changer de champ dans le formulaire, et la ... ben on peut pas. Et malgrès quelques essais, je ne parviens pas à comprendre le fonctionnement du script. Bon certes, en javascript je suis nul, mais je me disais que ca devait pas etre si compliqué d'autoriser la touche tabulation en plus de la touche delete. Mais apparement c'est déjà trop pour moi :?

Si quelqu'un connait une solution, ca serait super tip top ;)

Posté : 10 oct. 2006, 20:49
par Truc
Essai avec :
touche = (touche == 8 || touche == 0) ? 1 : !isNaN(String.fromCharCode(touche));	

Posté : 11 oct. 2006, 08:46
par RilaX
Ben dites donc ...
Je suis pas fier la !
Ca marche nickel chrome tip top comme je le souhaitais avec ce petit ajout. Quand je pense que c'etait si simple ... je suis vraiment une bille en javascript :lol:

En tous cas merci beaucoup Truc, sans toi je n'aurais probablement jamais trouvé.