Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

exp reg pour du texte utf8

5 réponses
Avatar
Olivier Masson
Bonjour,

Est-il possible de créer un expression régulière simple pour contrôler
qu'un champs comporte des lettres... toutes les lettres, y compris
cyrillique, accentuées, etc. Le tout en utf8 ?

Merci.

5 réponses

Avatar
Olivier Miakinen
[diapublication et suivi vers fr.comp.lang.regexp]

Le 07/12/2009 16:10, Olivier Masson a écrit :

Est-il possible de créer un expression régulière simple pour contrôler
qu'un champs comporte des lettres... toutes les lettres, y compris
cyrillique, accentuées, etc. Le tout en utf8 ?



Avec PCRE : /^pL+$/ vérifie qu'une chaîne ne contient que des lettres
au sens Unicode (au moins une).

Malheureusement, je crois que ce n'est pas encore implémenté dans
JavaScript (du moins dans ECMAScript 3e édition), et je ne crois pas
qu'il existe d'alternative, hormis celle de décrire laborieusement
toutes les plages de codes qui t'intéressent.

Je fais suivre à tout hasard vers fr.comp.lang.regexp.

Cordialement,
--
Olivier Miakinen
Avatar
SAM
Le 12/7/09 4:10 PM, Olivier Masson a écrit :
Bonjour,

Est-il possible de créer un expression régulière simple pour contrôler
qu'un champs comporte des lettres... toutes les lettres, y compris
cyrillique, accentuées, etc. Le tout en utf8 ?

Merci.



Peut-être + simple de vérifier que ça ne comporte pas les indésirables ?

champ.match(/[^+*"'<>‹≈sd.,:;(){}[]/—_-]+/); // à compléter ?

Ou bien si tout est acceptable sauf chiffres
/[^0-9]+/


Passer en utf-8 si le news-reader ne l'a pas fait tout seul.

javascript:chp='©†™®‡ß<朇Ò∂ƒfiÌπ¬µ◊ß';alert(chp.replace(/[^+*"'<>‹≈sd.,:;(){}[]/—_-]+/,'').length==0)
javascript:chp='©†™®‡ß朇Ò∂ƒfiÌπ¬µ◊ßПробуйте';alert(chp.replace(/[^+*"'<>‹≈sd.,:;(){}[]/—_-]+/,'').length==0)


--
sm
Avatar
Olivier Miakinen
Le 08/12/2009 13:44, SAM a écrit :

Est-il possible de créer un expression régulière simple pour contrôler
qu'un champs comporte des lettres... toutes les lettres, y compris
cyrillique, accentuées, etc. Le tout en utf8 ?



Peut-être + simple de vérifier que ça ne comporte pas les indésirables ?
champ.match(/[^+*"'<>‹≈sd.,:;(){}[]/—_-]+/); // à compléter ?



Comme le rappelle souvent John Gallet sur fclp, le seul contrôle
sécurisé est celui qui liste les caractères autorisés plutôt que les
caractères interdits.

Ou bien si tout est acceptable sauf chiffres
/[^0-9]+/



Quid des chiffres en hindi, dévanâgarî, bengali, gourmoukhî, tamoul,
télougou, malayalam, etc. ?

[...] '©†™®‡ß朇Ò∂ƒfiÌπ¬µ◊ßПробуйте' [...]



Ah, évidemment, si tu te limites aux caractères qui sont dans MacRoman
(y compris le logo Apple, mais non compris l'immense diversité des
langues du monde), c'est plus facile. ;-)
Avatar
SAM
Le 12/8/09 3:17 PM, Olivier Miakinen a écrit :
Le 08/12/2009 13:44, SAM a écrit :
Est-il possible de créer un expression régulière simple pour contrôler
qu'un champs comporte des lettres... toutes les lettres, y compris
cyrillique, accentuées, etc. Le tout en utf8 ?


Peut-être + simple de vérifier que ça ne comporte pas les indésirables ?
champ.match(/[^+*"'<>‹≈sd.,:;(){}[]/—_-]+/); // à compléter ?



Comme le rappelle souvent John Gallet sur fclp, le seul contrôle
sécurisé est celui qui liste les caractères autorisés plutôt que les
caractères interdits.

Ou bien si tout est acceptable sauf chiffres
/[^0-9]+/



Quid des chiffres en hindi, dévanâgarî, bengali, gourmoukhî, tamoul,
télougou, malayalam, etc. ?



Bon .... sauf chiffres arabes
C'est mieux comme ça Sidi Olivier ?

[...] '©†™®‡ß朇Ò∂ƒfiÌπ¬µ◊ßПробуйте' [...]



Ah, évidemment, si tu te limites aux caractères qui sont dans MacRoman
(y compris le logo Apple, mais non compris l'immense diversité des
langues du monde), c'est plus facile. ;-)



Koi ? Couha ? j'avions pourtant glissé qques cyrilliques, non ?

Ça n'est qu'un exemple de chaine qui répond à la non présence des
indésirables définis précédemment - et dont il était bien indiqué qu'ils
pourraient être complétés - je te laisse libre de proposer une autre
chaine en Nahuatl (n'en ai pas trouvé la table :-( )

Pour moi, la question initiale reste encore un peu vague, et ce n'est
pas ton éclairage qui va en vaincre la nébulosité ...

fclp je ne connais pas et John Gallet non plus mais il est certain
qu'une idée plus précise des lettres requises serait un point positif.
(le braille est-il admis ?)(y comprises les abréviations?)

--
sm
Avatar
Olivier Masson
Le 08/12/2009 13:44, SAM a écrit :


Peut-être + simple de vérifier que ça ne comporte pas les indésirables ?

champ.match(/[^+*"'<>‹≈sd.,:;(){}[]/—_-]+/); // à compléter ?

Ou bien si tout est acceptable sauf chiffres
/[^0-9]+/





Comme le répond Olivier, je préfère nettement un /drop all, allow any/,
ce qui permet d'éviter les "à compléter ?" parfois dangereux.
Au-delà de ça, dans un prénom par exemple, je ne veux pas toute sorte de
caractères.
Et plus généralement, j'essaie d'avoir des expressions-types pour ne pas
me poser de questions pas la suite ; je veux des lettres : je n'obtiens
que des lettres. On pourrait faire de même pour les chiffres car Olivier
soulève, encore une fois, le problèmes des chiffres non-arabes.
Ca peut paraitre disproportionné, mais c'est insupportable de voir que
TOUTES les sources js ou php que je vois, avec de jolies classes
partout, où ça se la pète "je fais de MVC", etc. ne sont pas foutues de
gérer l'internationalisation.
Alors on fait le pro à dire "oula, il faut séparer les couches, et
gnigni et gnagna" et à côté, on blinde sont code de die, de catch,
d'exceptions en tous genres qui, au final, balance une bonne variable en
dure avec un "Connexion à la base impossible". OUAIS, JE SUIS ÉNERVÉ ;)
(comme dirait l'autre, j'ai un profond mépris pour ces gens-là :D)
Enfin bon... Donc j'essaie de penser à ça pour la conception des regexp.