2010-04-23 6 views
1

Je dois utiliser preg_match pour vérifier que seulement a-z0-9. est utilisé (y compris l'arrêt complet (.)). Je ne veux rien remplacer. Mon problème est qu'il ne remarque pas d'espace blanc au début d'une chaîne.Vérifier les espaces au début de la chaîne

Aussi, si quelqu'un sait comment vérifier qu'il n'y a pas deux arrêts complets d'affilée, je serais très reconnaissant.

Ce que j'ai jusqu'à présent:

("/[^a-z0-9.]+$/",$request) 

Merci!

Répondre

6

Vous pouvez le faire sans regex en utilisant ltrim'

if(ltrim($request) != $request) { // there was whitespace }

+0

Je ne veux pas tout remplacer. – ITg

+0

@ITg - vous ne remplacez rien ici - juste en vérifiant s'il y avait des espaces au début. – thetaiko

+0

Il veut vérifier s'il n'y a pas d'autres caractères que .a-z0-9 pas s'il n'y a pas d'espace au début. –

0
("/[^a-z0-9.]/",$request) 

Edition - J'ai mal lu votre question. Cela va vérifier s'il y a des caractères non a-z0-9..

+0

Ne semble pas fonctionner:/ – ITg

+0

^inside [] est faux –

0

^l'intérieur [] nie characers (modifications sens à « tout omble chevalier, sauf ceux-ci »)

^en dehors de [] signifie « beggining de la chaîne » (comme signifie $ « fin de la chaîne »)

vous avez donc besoin quelque chose comme ça:

("/^[a-z0-9.]+$/",$request)

Si vous voulez exclure des séquences de points, mais pas de points simples dont vous avez besoin plus compliqué peu de chose:

preg_match('/^([a-z0-9]|(?<!\\.)\\.)+$/', $request);

1
/^(?!.*\.{2,}.*$)[a-z0-9.]+$/ 

Explication

 
^   # start-of-string anchor 
(?!  # begin negative look-ahead ("a position not followed by...") 
    .*  # anything 
    \.{2,} # a dot, two times or more 
    .*  # anything 
    $  # the end of the string 
)   # end negative lookahead 
[a-z0-9.]+ # a-z or 0-9 or dot, multiple times 
$   # end-of-string anchor 

matchs

  • "abc"
  • "abc123"
  • "abc.123"

échoue

  • " abc"
  • "abc..123"
  • "abc!"
+0

if ((! Preg_match ("/^(?!. * \. {2,}. * $) [A-z0-9.] + $/", request $)) && (ltrim ($ request) == $ requête)) { return true; } Fonctionne comme je le veux – ITg

+0

J'ai donné la bonne réponse à la personne avec les «points» les plus bas? sur les deux réponses contributives :) Merci! – ITg

+0

@ITg: vous avez donné une "bonne réponse" à quelqu'un qui n'a pas répondu à votre question. Ma réponse vérifie s'il n'y a pas deux arrêts complets d'affilée, l'autre non. – Tomalak

Questions connexes