Ik hoop dat jullie snappen wat ik hiermee bedoel:

^[^-][a-zA-Z-]+$

Het mag niet met een '-' beginnen maar in de string mogen alleen letters voorkomen maar ook een streepje. Formulier ik dit goed in de reguliere expressie?
Gewoon ff uittesten. Het zou kunnen dat je dat streepje binnen de [] nog moet escapen met een backslash. Die plus is waarschijnlijk ook niet nodig.

[edit]Zo kan hij ook:[/edit]
<?php
$test[] = 'adkjsldkfj';
$test[] = '-adkjsldkfj';
$test[] = 'a-dkjsldkfj';
$test[] = 'adk--jsldkfj';

foreach ($test as $val) {
echo preg_match ('/^[^\-][a-zA-Z\-]/', $val);
}
?>
Waarvoor is die backslash nodig?
escapen?
Ja, dat is dus het punt. Ik weet niet waarom je zou moeten escapen ik weet niet wat het is.
Omdat een "-" een speciale betekenis heeft binnen een karakter klasse.
Martijn! schreef op 26.09.2007 19:36
Omdat een "-" een speciale betekenis heeft binnen een karakter klasse.

En die betekenis is: tot en met (t/m)
Want a-z betekent in reguliere expressie: a tot en met z.

Echter wanneer je dit doet: \- betekent dat: - en niet tot en met. De - heeft nu zijn functie verworpen.
Tussen brackets "[]" heeft ieder teken toch zijn eigen werkelijke betekenis. Dus heeft dan \ ook zijn werkelijke betekenis? En dan heeft het - teken ook gewoon zijn 'normale' betekenis
@Orhan

Als jij in een regex [a-z] doet, staat de - tussen de brackets. Daaruit kan je opmaken dat wat je nu als laatste zegt niet klopt. - betekend hier tussen de brackets nog steeds tot en met.
Het - tussen brackets betekent alleen 'tot en met' als het tussen twee andere tekens staat die een reeks vormen.

[-] --> eigen betekenis (-)
[a-z] --> a tot en met z
[a-z-] --> a tot en met z, en -
[a\-z] --> a, - en z

Kortom, je hoeft hem niet per se te escapen. Voor de duidelijkheid mag je het natuurlijk altijd doen.
Maar de backslash heeft dan gewoon de funtie om te escapen?, staat het dan niet voor gewoon een \

Reageren