2010-08-20 6 views
0

Récemment, je l'ai passé à PHP 5.3+ et après que la migration i appris que la fonction eregi() a été amorti, sa fonction i surtout utilisé pour mes besoins regex.Aide à l'aide Regex preg_match

Mais maintenant, je devais passer à la fonction preg_match(), je ne parviens pas à valider une certaine condition.

Bonjour tout le monde

Je veux que le preg_match pour valider ce qui précède « Bonjour tout le monde » chaîne, la chaîne contient des espaces blancs en elle.

Mais je veux qu'il valider même s'il n'y a pas d'espace « helloWorld » ou tout simplement « bonjour ». Ce que j'essaie de faire, c'est que dans mon script j'ai un champ de texte pour le titre de la catégorie, je veux qu'il accepte des espaces dedans et pas d'autres caractères spéciaux (tels que ._- + *,) .

Je l'ai fait travailler, mais je ne suis pas sûr si c'est la bonne façon dont je me sers.

preg_match('/^[a-zA-Z0-9\s]*$/', $cat_name);' 

Toute aide serait appréciée.

Répondre

4

Cela semble OK, mais acceptera la chaîne vide, donc vous pouvez changer * à + Rappelez-vous que cette regex n'acceptera probablement pas les caractères UTF-8 spécifiés par la langue.

Voir ce commentaire dans le manuel: http://www.php.net/manual/en/function.preg-match.php#95828

Notez également que certains charaters spécifiques sont très souvent utilisés dans les titres, comme "et peut-être il serait préférable de permettre

+0

+1 parce que je l'ai également écrit dans ma mise à jour ma réponse, mais je pense que vous étiez 2 secondes plus vite. :) –

+0

Merci Killer_PL et Mark Byers :) J'étais en train de vérifier la condition non-vide pour ceci au-dessus de cette vérification de regex. – Zubair1

+0

lol je ne sais pas comment écrire du code dans les commentaires ici :) il montre foiré. – Zubair1

1

Oui, c'est la bonne façon. Vous pouvez également utiliser un modificateur insensible cas au lieu de a-zA-Z:

preg_match('/^[a-z0-9\s]*$/i', $cat_name);' 

Une chose que vous voudrez peut-être à considérer est que l'expression régulière accepte actuellement la chaîne vide. Si vous voulez vous assurer qu'il y a au moins un caractère, utilisez + au lieu de *.

0

Notez que \ s permet également d'autres caractères d'espace comme tabulator ou saut de ligne.

+0

quoi d'autre je pourrais utiliser autre que le \ s? – Zubair1

+1

juste utiliser un espace à la place: "" (sans les crochets) –

+1

Utilisez un espace simple ('') à la place ... qui ne fonctionnerait que pour les espaces, et non d'autres espaces – Frxstrem

1

devrait fonctionner, mais vous. peut remplacer le \ s avec un espace normal « », il correspond uniquement à des espaces au lieu d'autres caractères blancs (comme les onglets). remplacer également le * avec + il ne prendra pas des chaînes vides.

preg_match('/^[a-z0-9 ]+$/i', $cat_name);' 
+0

Thanks, Done :) Serait-ce toujours une menace si je devais vérifier la chaîne vide avant cette preg_match? Je le fais encore juste en cas mais je me demandais :) – Zubair1

+1

Vous ne devriez pas, mais vous pouvez utiliser différents contrôles pour retourner différents messages d'erreur. Peut être facile à utiliser pour dire à l'utilisateur ce qu'il fait mal exactement :) – Powertieke