Une 'tite RegExp...

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

07 oct. 2006, 18:03

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:

Mammouth du PHP | 1511 Messages

07 oct. 2006, 18:16

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...
@+

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

07 oct. 2006, 18:25

[0-9] ?

Mammouth du PHP | 1511 Messages

07 oct. 2006, 18:48

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 :)
@+

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

07 oct. 2006, 18:57

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.

Mammouth du PHP | 1511 Messages

07 oct. 2006, 19:08

Il y a peut-être un équivalent du str_replace en javascript?
@+

Mammouth du PHP | 19672 Messages

07 oct. 2006, 19:49

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

07 oct. 2006, 20:43

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. ;)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 oct. 2006, 20:44

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);">

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

07 oct. 2006, 20:48

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:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 oct. 2006, 20:56

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:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

07 oct. 2006, 21:01

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:

Eléphanteau du PHP | 38 Messages

10 oct. 2006, 11:43

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 ;)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

10 oct. 2006, 20:49

Essai avec :
touche = (touche == 8 || touche == 0) ? 1 : !isNaN(String.fromCharCode(touche));	

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 38 Messages

11 oct. 2006, 08:46

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é.