11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour

Ma question peut sembler bête mais j'avoue que là j'ai un trou de mémoire énorme. Je fait une correction de formulaire en JS et je ne me souviens plus de la solution pour activer les lettres + les caractères spéciaux. Je vous montre la ligne de vérification

"regex":"/^[a-zA-Z\ \']+$/",


Donc cette ligne marche et me corrige bien si il n'y a que des lettres, mais que faut il rajouter pour avoir les caractères spéciaux comme "ç" par exemple

Merci
IL n'existe pas de méthode magique, il faut indiquer chaque caractère spécial autorisé, si on veut être vraiment précis.

Si on accepte d'être un peu plus laxiste, on peut utiliser ce raccourci :
a-zA-ZÀ-ÿ

Autrement dit hormis les lettres non accentuées, on accepte les caractères ayant un code ASCII compris entre 192 et 255. IL n'y a pas que des lettres accentués, il y a aussi d'autres signes comme ÷ ou ø dans cette intervalle...
QuentinC a écrit :
on accepte les caractères ayant un code ASCII compris entre 192 et 255

Il n'y a PAS de code ASCII au delà de 127! (Et encore, le 127 est un caractère de contrôle, le dernier caractère imprimable est le 126, qui correspond au glype «tilde»).

Je suppose que tu faisais référence à ISO-8859-1 (voire ISO-8859-15) plutôt qu'à ASCII? Problème: si on est en UTF-8, est-ce que ça marche quand même? Les caractères existant entre «À» (valeur numérique en hexadécimal: C380) et «ÿ» (valeur numérique: C3BF) ne sont pas forcément ceux souhaités, même si les valeurs sont proches et on est sans doute dans un jeu de caractères «latin étendu».

Enfin, si JavaScript se base de toute manière sur Unicode (indépendamment de l'encodage de la page), on aura intérêt à regarder du côté des jeux de caractères Unicode:
http://www.alanwood.net/unicode/#links
Et surtout: http://www.alanwood.net/unicode/latin_1_supplement.html

La solution proposée par Quentin semble donc très correcte, sauf si on veut s'amuser à lister très précisément les caractères souhaités pour exclure le signe de multiplication ou les O avec des petits ronds dessus.

Bon, disons que c'était une contradiction juste pour la forme (ASCII, tss...).
Pour ASCII tu as raison, mais j'avais voulu rester simple.

J'avoue que je ne sais pas du tout comment se comportent les regexp en UTF8. J'aime pas cet encodage parce qu'il me cause toujours plein de problèmes à la noix, je suis donc resté à ISO-8859-1 et donc, je ne me suis jamais penché sur la question. Mais je crois que javascript fonctionne de toute façon en unicode, ce qui, en passant, n'est pas le cas de php.