Page 1 sur 1

[PHP] Aide sur expression reguliere (preg match)

Posté : 30 nov. 2010, 19:33
par perlimpinpin
Bonjour,

J'ai les valeurs suivantes dans un tableau que je souhaite nettoyer :

.
,
?
???
???????????
87+sss
X
AAAAAAAA
BBBBB
AAA BBBBB
AAA555AAA21
545AAA-5454
10-A4111


En gros je ne veux garder que les chaines qui :
- contiennent au minimum une lettre et un chiffre (mais pas l'un sans l'autre)
- dont la longueur est strictement supérieure à 1 caractère
- qui ne contiennent pas d'espace, ni de caractères spéciaux (type tabulation, retour chariot, etc.)

Les trois derniers de la liste doivent matcher.

Merci de votre aide.

Re: [PHP] Aide sur expression reguliere (preg match)

Posté : 30 nov. 2010, 20:04
par devlop78
/^[a-z0-9]*(([0-9][a-z])|([a-z][0-9]))[a-z0-9]*$/i

je dirais ... mais c'est cra cra quand meme

Re: [PHP] Aide sur expression reguliere (preg match)

Posté : 01 déc. 2010, 10:26
par perlimpimpim
Merci !

Mais les deux derniers ne matchent pas :(

545AAA-5454
10-A4111

La chaîne doit contenir au moins une lettre ET un chiffre et peut contenir un / ou un -

Re: [PHP] Aide sur expression reguliere (preg match)

Posté : 01 déc. 2010, 10:50
par moogli
essai avec /[a-z0-9]*(([0-9][a-z])|([a-z][0-9]))[a-z0-9]/gi ?

tu peut tester avec http://gskinner.com/RegExr/ (indiqué par devlop78)

@+

Re: [PHP] Aide sur expression reguliere (preg match)

Posté : 01 déc. 2010, 11:30
par perlimpimpim
Le /g fait gueuler mon php

preg_match() [<a href='function.preg-match'>function.preg-match</a>]: Unknown modifier 'g'

Pour simplifier :

- la chaîne doit contenir une lettre et un chiffre ou que des chiffres (mais pas que des lettres)
- la chaîne doit contenir plus de 1 caractère
- la chaîne peut contenir un ou plusieurs espaces, un tiret (-) ou un slash (/) n'importe où

J'ai déjà essayé avec l'url donnée mais ça ne fonctionne pas, la regexp doit être trop compliquée.

Re: [PHP] Aide sur expression reguliere (preg match)

Posté : 01 déc. 2010, 11:48
par stealth35
le g c'est une option flash :wink:

Re: [PHP] Aide sur expression reguliere (preg match)

Posté : 01 déc. 2010, 15:00
par devlop78
Oui là c'est moins évident

/^[a-z0-9]*(([0-9][a-z])|([a-z][0-9]))[a-z0-9]*$/i

Peut etre alors

/^[a-z0-9\-]*(([0-9][\-\\]*[a-z])|([a-z][\-\\]*[0-9]))[a-z0-9\-]*$/i

???

Re: [PHP] Aide sur expression reguliere (preg match)

Posté : 01 déc. 2010, 15:30
par perlimpimpin
Franchement bravo, je n'y pige rien mais bravo, tu y es presque !

Reste ces chaines qui sont exclues par la regexp et que je souhaite garder :

1319469
109625772
1021011724
1220400112/AC
1370401226/AD
50077601147
50077601147

Re: [PHP] Aide sur expression reguliere (preg match)

Posté : 01 déc. 2010, 20:14
par devlop78
Bah c'est toi qui n'est pas logique, tu définis des règles et tu les changes :
contiennent au minimum une lettre et un chiffre (mais pas l'un sans l'autre)
Evidemment "1319469" ne répond pas à ce critère ...

Par contre pour "1220400112/AC", c'est moi j'ai autorisé les \ au lieu des / ... lol


/^[a-z0-9\-]*(([0-9][\-\/]*[a-z])|([a-z][\-\/]*[0-9]))[a-z0-9\-]*$/i

Mais ça se trouve on peut le réduire deux fois ... je ne suis pas expert en expression régulière ... je réfléchis c'est tout ...

Re: [PHP] Aide sur expression reguliere (preg match)

Posté : 02 déc. 2010, 11:05
par perlimpimpim
Merci c'est du bon boulot, moi je ne capte rien. J'avais oublié un cas, désolé.

Il s'agit bien de contenir une lettre et un chiffre ou au moins 2 chiffres.

J'ai changé les règles car je pensais te faciliter la tache ;)

Autrement, peut-être est-ce plus simple en matchant les données à exclure puis à inverser le preg match ? Les conditions semblent plus simples :

- la chaîne ne contient pas de chiffre
- la chaîne peut contenir au moins une fois le caractère + ou _ ou ? . ou ,

Re: [PHP] Aide sur expression reguliere (preg match)

Posté : 06 déc. 2010, 12:13
par perlimpinpim
un petit up, on y est presque ! ;)