2010-08-26 4 views
1

Comment écrire une expression qui vérifie les lowcaps, les points et sans aucun espace dans la chaîne? Jusqu'à présent, le code ci-dessous essayait de vérifier les lowcaps et les points (cela ne fonctionne pas de toute façon!) Mais je ne sais pas comment ajouter dans l'expression pour les espaces blancs.Expressions régulières: majuscules, points, espaces zéro

# check for matches of lowcaps or lowcaps with a dot 
if (!preg_match('/([a-z0-9]|[a-z0-9\.])/', $cst_value)) 
{ 
    $error = true; 
    echo ' please use lowcaps only with dot(s) and without any spacing.'; 
} 

des idées?

merci beaucoup, Lau

+2

Pour l'OP, et toutes les réponses en utilisant '[a-z]' ... "toucher". Tous "minuscules", mais ne correspondent pas aux expressions rationnelles proposées. Pour le PO: devrait-il? – Thanatos

+0

Lowcaps = majuscules minuscules?C'est comme "minuscules géants". – Gumbo

+0

Vous n'avez pas besoin d'échapper '.' dans une classe de caractères. Votre classe de caractères doit être '[a-z0-9.]' – dawg

Répondre

2

[a-z0-9.] correspond à une lettre minuscule ou un chiffre ou un point.
[^a-z0-9.] correspond à tous les caractères qui ne sont pas une lettre minuscule ou un chiffre ou un point.
Donc, si /[^a-z0-9.]/ correspond à n'importe où la chaîne contient autre chose que lc-lettre, chiffre ou point. Si cela ne correspond pas, votre condition est remplie.

if (!preg_match('/[^a-z0-9.]/', $cst_value)) { 
    // only lower-case letters, digits or dots 
} 

ou sans chiffres

if (!preg_match('/[^a-z.]/', $cst_value)) { 
    // only lower-case letters or dots 
} 

mise à jour: exemple:

foreach(array('abcdef', 'abc de', 'abc.de', 'aBcde') as $cst_value) { 
    echo $cst_value, ': '; 
    if (!preg_match('/[^a-z.]/', $cst_value)) { 
    echo " ok.\n"; 
    } 
    else { 
    echo "failure\n"; 
    } 
} 

impressions

abcdef: ok. 
abc de: failure 
abc.de: ok. 
aBcde: failure 
+1

Vous devez supprimer le^du groupe de caractères ou le! dans l'expression. –

+0

@Felix Kling: Peut-être que le!, Mais certainement pas le ^. Exemple ajouté. – VolkerK

+0

merci. comment si je veux que l'entrée doive contenir un point ?? merci – laukok

0
/^[a-z0-9.]+$)/ 

Devrait le faire. Il suffit de penser à ce seulement les petites lettres, les points et les chiffres sont autorisés. L'expression ne correspondra pas si un espace blanc est inclus. Btw. vous n'avez pas à échapper aux méta-caractères dans un groupe de capture.

^ et $ indique que la chaîne entière ne doit contenir que les caractères du groupe de capture (ils marquent le début et la fin de la chaîne) et le + dit qu'au moins un de ces caractères doit se produire. En fonction de vos besoins, vous pouvez le modifier par ex. {3,} ce qui signifie que la chaîne doit comporter au moins 3 caractères.

Exemple:

$values=array("fooBar", "123.45", "foo bar", "foo.bar"); 

foreach($values as $value) { 
    if (!preg_match('/^[a-z0-9.]+$/', $value)) 
    { 
     echo "Not valid: $value\n"; 
    } 
} 

impressions:

Not valid: fooBar 
Not valid: foo bar 
+0

merci. cela fonctionne bien mais si je l'ai testé avec une URL avec http: // au début. il imprimera cette URL dans la sortie ne correspond pas. pourquoi est-ce? puis-je accepter les entrées d'URL? merci – laukok

+0

@lauthiamkok: Eh bien, comme je l'ai dit, les expressions régulières signifient fondamentalement: Accepter tout ce qui est petit, un chiffre ou un point. Mais 'http: //' contient ':' et '/' aussi. Vous devrez également ajouter ces caractères à la classe de caractères, mais cela ne validera pas si l'URL est correcte. –

0

Je pense que vous voulez ceci:

if (preg_match('/[^a-z0-9.]/')) { 
    $error = true; 
} 

Gardez à l'esprit, j'ai enlevé le!. Maintenant, si cela correspond, vous obtenez l'erreur. VolkerK l'a inversé mais a oublié d'enlever le!, Je pense. En outre, http://regexpal.com/ est votre ami.

0

'/^[a-z0-9.]+$/' devrait être la bonne regex.