Salut,
cvb, dans ton exemple, je pense qu'il sera beaucoup plus rapide de comparer les codes ASCII, parce que sinon pour chaque caractères du texte, tu devras balayer tout le tableau (par exemple 36 éléments en considérant les chiffres et les lettres minuscules) alors qu'en faisant 4 comparaisons en ASCII, tu fais le même boulot.
Sinon momo194, je ne connais pas vraiment ereg (je suis plutot habitué aux expressions régulières Perl), mais d'après les exemples que j'ai vu dans la doc de php sur ereg, [] sert à définir une classe de caractères (comme dans PCRE d'ailleurs) et donc les quantificateurs comme + doivent être mis à l'extérieur ce qui donnerait :
Code :
- ereg ('[[:alnum:]^[:punct:]]+', $exp)
|
De plus d'après ce que j'ai lu dans les commentaires, le symbôle ^ pour exclure une classe de caractère n'est valable uniquement qu'en début de classe, ce qui n'est pas le cas dans ton exemple.
D'aileurs, as-tu besoin d'exclure la classe de caractères [:punct:] ? [:alnum:] ne contient-il pas que des caractères alpha-numériques (plus le _ peut-être) ?
Donc on pourrait considérer '[[:alnum:]]+' mais dans ce cas-là, ereg renverait TRUE pour la chaîne '!.#abc12@)' car il trouverait la partie abc12. Ce qu'il faut donc, c'est spécifié que toute la chaîne doit correspondre au masque. Pour cela, utilises ^ et $ en début et fin de chaîne :
'^[[:alnum:]]+$' et d'ailleurs remplace le + par un * si tu considères que la chaîne vide doit renvoyer TRUE.
Remarque : si [:alnum:] ne fait pas ce que tu veux, tu peux très bien définir toi-même ta classe de caractère en faisant [a-zA-Z0-9] (par contre pour les accents )