Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Comporte au moins une lettre

2 views
Skip to first unread message

Otomatic

unread,
Oct 12, 2017, 4:37:12 AM10/12/17
to
Bonjour,

Il y a quelques trois années, avec l'aide précieuse d'Olivier, nous
avons défini une regexp qui me donne entière satisfaction :

if(preg_match('/^
[A-Za-z0-9]+ # letter or number in first place
([-.](?![-.]) # a . or - not followed by . or -
| # or
[A-Za-z0-9] # a letter or a number
){1,60} # this, repeated from 1 to 60 times
[A-Za-z0-9] # letter or number at the end
$/x',$vh_name) == 0)

Comme l'indique le titre, en plus, il faudrait vérifier qu'il y a au
moins une lettre dans la chaîne à tester.
Je ne sais pas s'il est possible d'ajouter ce type de test dans la
regexp existante ou s'il vaut mieux effectuer un second test si le
premier est positif.

Merci
--
Il vaut mieux ignorer où l'on est, et savoir qu'on l'ignore, que de se
croire avec confiance où l'on n'est pas. Jean Dominique Cassini.
Technologie aéronautique - http://aviatechno.net - Les anciens de Vilgénis

Olivier Miakinen

unread,
Oct 12, 2017, 9:19:01 AM10/12/17
to
Bonjour,

Le 12/10/2017 10:37, Otomatic a écrit :
>
> Il y a quelques trois années, avec l'aide précieuse d'Olivier, nous
> avons défini une regexp qui me donne entière satisfaction :
>
> if(preg_match('/^
> [A-Za-z0-9]+ # letter or number in first place
> ([-.](?![-.]) # a . or - not followed by . or -
> | # or
> [A-Za-z0-9] # a letter or a number
> ){1,60} # this, repeated from 1 to 60 times
> [A-Za-z0-9] # letter or number at the end
> $/x',$vh_name) == 0)
>
> Comme l'indique le titre, en plus, il faudrait vérifier qu'il y a au
> moins une lettre dans la chaîne à tester.

Ok.

> Je ne sais pas s'il est possible d'ajouter ce type de test dans la
> regexp existante ou s'il vaut mieux effectuer un second test si le
> premier est positif.

Faire un second test serait peut-être le plus simple, peut-être aussi
le plus efficace si les chaînes sont longues du fait qu'on n'a pas
besoin de masque avec répétition du style « .* » ou « .+ » :
preg_match('/[A-Za-z]/')

Sinon, je propose ceci, où je ne fais qu'ajouter une assertion au
début de ta regxep :

if(preg_match('/^
(?=.*[A-Za-z]) # at least one letter somewhere
[A-Za-z0-9]+ # letter or number in first place
([-.](?![-.]) # a . or - not followed by . or -
| # or
[A-Za-z0-9] # a letter or a number
){1,60} # this, repeated from 1 to 60 times
[A-Za-z0-9] # letter or number at the end
$/x',$vh_name) == 0)



--
Olivier Miakinen

Otomatic

unread,
Oct 12, 2017, 10:11:57 AM10/12/17
to
Olivier Miakinen <om+...@miakinen.net> écrivait :

> Faire un second test serait peut-être le plus simple, peut-être aussi
> le plus efficace si les chaînes sont longues du fait qu'on n'a pas
> besoin de masque avec répétition du style « .* » ou « .+ » :
> preg_match('/[A-Za-z]/')
>
> Sinon, je propose ceci, où je ne fais qu'ajouter une assertion au
> début de ta regxep :
>
> if(preg_match('/^
> (?=.*[A-Za-z]) # at least one letter somewhere
> [A-Za-z0-9]+ # letter or number in first place
> ([-.](?![-.]) # a . or - not followed by . or -
> | # or
> [A-Za-z0-9] # a letter or a number
> ){1,60} # this, repeated from 1 to 60 times
> [A-Za-z0-9] # letter or number at the end
> $/x',$vh_name) == 0)

Comme je garde précieusement tous mes scripts d'essais, et comme la
chaîne à comparer est déjà extraite et filtrée précédemment (100
caractères maxi), l'ajout de l'assertion (Qu'il faut que je révise !) me
convient parfaitement.

Merci.
--
Un ordinateur résout des problèmes que nous n'aurions pas sans lui
Technique aéronautique : http://aviatechno.net
0 new messages