|
| Jeg fatter ikke reg.exp. Fra : JD |
Dato : 04-07-06 14:33 |
|
Om jeg fatter det... jeg har siddet og kigget længe på diverse sider med
reg.exp. og alligevel fatter jeg det ikke! Jeg skal have fundet noget så
simpelt som validering af en tekst som kun må indeholde a-z A-Z 0-9 og et -
(minus). Jeg har prøvet med denne nedenstående og diverse varianter:
if(ereg(".*[0-9a-zA-Z\-]", $text))
echo "OK";
Det virker ikke men hvad er det jeg gør galt? Og hvad hvis teksten maks må
være 50 karaktere lang?
| |
Peter Brodersen (04-07-2006)
| Kommentar Fra : Peter Brodersen |
Dato : 04-07-06 14:44 |
|
On Tue, 4 Jul 2006 15:33:23 +0200, "JD" <jonh@doe.xyz> wrote:
>if(ereg(".*[0-9a-zA-Z\-]", $text))
> echo "OK";
Regulære udtryk søger blot inde i en streng. Så lige nu søger du efter
"eventuelt noget, og så et gyldigt tegn". Du bør angive start og slut
på strengen, fx én af følgende:
Mindst ét tegn:
^[0-9a-zA-Z-]+$
Mellem 1 og 50 tegn:
^[0-9a-zA-Z-]{1,50}$
--
- Peter Brodersen
Ugens^WMånedens^WSommerens værktøj - Find vej: www.findvej.dk
Nu med link direkte til en adresse, fx: www.findvej.dk/Nybrogade2,1203
| |
JD (04-07-2006)
| Kommentar Fra : JD |
Dato : 04-07-06 14:56 |
|
>>if(ereg(".*[0-9a-zA-Z\-]", $text))
>> echo "OK";
>
> Regulære udtryk søger blot inde i en streng. Så lige nu søger du efter
> "eventuelt noget, og så et gyldigt tegn". Du bør angive start og slut
> på strengen, fx én af følgende:
>
> Mindst ét tegn:
> ^[0-9a-zA-Z-]+$
^ er starten af strengen. det forstår jeg.
Er +$ eller $ slutningen af strengen? Jeg gætter jo på $ men er + så et
vilkårligt antal tegn efterfølgende som overholder det i []?
> Mellem 1 og 50 tegn:
> ^[0-9a-zA-Z-]{1,50}$
Tak til begge - det virker fint.
| |
Peter Brodersen (04-07-2006)
| Kommentar Fra : Peter Brodersen |
Dato : 04-07-06 15:16 |
|
On Tue, 4 Jul 2006 15:55:48 +0200, "JD" <jonh@doe.xyz> wrote:
>> Mindst ét tegn:
>> ^[0-9a-zA-Z-]+$
>
>^ er starten af strengen. det forstår jeg.
>Er +$ eller $ slutningen af strengen? Jeg gætter jo på $ men er + så et
>vilkårligt antal tegn efterfølgende som overholder det i []?
^ er starten og $ er slutningen
+ er blot en kort form for at skrive {1,} - dvs. mindst ét tegn og
gerne flere.
--
- Peter Brodersen
Ugens^WMånedens^WSommerens værktøj - Find vej: www.findvej.dk
Nu med link direkte til en adresse, fx: www.findvej.dk/Nybrogade2,1203
| |
Martin (04-07-2006)
| Kommentar Fra : Martin |
Dato : 04-07-06 14:44 |
|
JD wrote:
> Om jeg fatter det... jeg har siddet og kigget længe på diverse sider med
> reg.exp. og alligevel fatter jeg det ikke! Jeg skal have fundet noget så
> simpelt som validering af en tekst som kun må indeholde a-z A-Z 0-9 og et -
> (minus). Jeg har prøvet med denne nedenstående og diverse varianter:
>
> if(ereg(".*[0-9a-zA-Z\-]", $text))
> echo "OK";
Jeg kan nu bedst lide Perl Expressions, så det vil jeg da lige prøve at
lave en.
$pattern = "/^([0-9][a-z][A-Z])(?-)$/";
// Minus som er valgfrit
$pattern = "/^([0-9][a-z][A-Z]-$/";
// Minus IKKE valgfrit
if(preg($pattern,$text)) echo "okii";
Det er ihvertfald noget i den stil :)
> Og hvad hvis teksten maks må være 50 karaktere lang?
Der ville jeg nok bare bruge < http://php.net/strlen>
| |
JD (05-07-2006)
| Kommentar Fra : JD |
Dato : 05-07-06 10:16 |
|
> Om jeg fatter det... jeg har siddet og kigget længe på diverse sider med
> reg.exp. og alligevel fatter jeg det ikke! Jeg skal have fundet noget så
> simpelt som validering af en tekst som kun må indeholde a-z A-Z 0-9 og
> et - (minus). Jeg har prøvet med denne nedenstående og diverse varianter:
[CUT]
Jeg bruger nu denne: ^([-.0-9a-zA-Z]{3,250})$
De tilladte tegn er tydlige ovenstående, men strengen skal starte og slutte
med et tal eller et bogstav - ikke minus eller punktum. Kort og godt skal
det validere et domænenavn (ikke om det findes men om navnet er valid eller
ej).
| |
Kasper Johansen (05-07-2006)
| Kommentar Fra : Kasper Johansen |
Dato : 05-07-06 13:03 |
|
JD wrote:
> Jeg bruger nu denne: ^([-.0-9a-zA-Z]{3,250})$
>
> De tilladte tegn er tydlige ovenstående, men strengen skal starte og slutte
> med et tal eller et bogstav - ikke minus eller punktum. Kort og godt skal
> det validere et domænenavn (ikke om det findes men om navnet er valid eller
> ej).
Læg mærke til punktummet. Det betyder et vilkårligt tegn (med undtagelse
af linebreaks). Hvis strengen skal kunne indeholde et punktum og ikke
wildcartet (der bliver beskrevet ved et punktum), så skal du skrive
følgende i stedet: \.
Hvis trengen skal starte med et tal, så kan du f.eks. gøre dette:
^[0-9][-\.0-9A-z]{3,250}$
Læg mærke til "[0-9]". Det beskriver, at der skal være et enkelt tal
mellem 0 og 9. Det er faktisk det samme som: [0-9]{1}
Hvis du også vil tjekke, om der er et tal i slutningen af din streng, så
skal du derfor (logisk nok) tilføje følgende: [0-9] ...lige før $.
Hvis du læse mere om wildcards, så kan du se noget om det på følgende
link (en længere gennemgang af regex):
http://www.amk.ca/python/howto/regex/
Held og lykke med det.
--
Med venlig hilsen
Kasper Johansen
| |
Peter Brodersen (05-07-2006)
| Kommentar Fra : Peter Brodersen |
Dato : 05-07-06 14:07 |
|
On Wed, 05 Jul 2006 14:02:52 +0200, Kasper Johansen
<kaspernj@gmail.com> wrote:
>Læg mærke til punktummet. Det betyder et vilkårligt tegn (med undtagelse
>af linebreaks). Hvis strengen skal kunne indeholde et punktum og ikke
>wildcartet (der bliver beskrevet ved et punktum), så skal du skrive
>følgende i stedet: \.
Nej, sådan fungerer regulære udtryk ikke. De er kontekst-specifikke,
så derfor vil et punktum inde i en klasse ikke matche alt - det ville
ikke give mening.
$ php -r 'var_dump(ereg("[.]","Hej"));'
bool(false)
$ php -r 'var_dump(ereg("[.]","Hej."));'
int(1)
--
- Peter Brodersen
Ugens^WMånedens^WSommerens værktøj - Find vej: www.findvej.dk
Nu med link direkte til en adresse, fx: www.findvej.dk/Nybrogade2,1203
| |
Peter Brodersen (05-07-2006)
| Kommentar Fra : Peter Brodersen |
Dato : 05-07-06 14:07 |
|
On Wed, 05 Jul 2006 15:06:38 +0200, Peter Brodersen
<usenet2006@ter.dk> wrote:
>Nej, sådan fungerer regulære udtryk ikke. De er kontekst-specifikke,
>så derfor vil et punktum inde i en klasse ikke matche alt - det ville
>ikke give mening.
(men det skader ikke at sætte en backslash - ud over at man kan
forvirre efterfølgende kodere og være med til at lade en misforståelse
overleve)
--
- Peter Brodersen
Ugens^WMånedens^WSommerens værktøj - Find vej: www.findvej.dk
Nu med link direkte til en adresse, fx: www.findvej.dk/Nybrogade2,1203
| |
Kasper Johansen (05-07-2006)
| Kommentar Fra : Kasper Johansen |
Dato : 05-07-06 14:30 |
|
Peter Brodersen wrote:
> (men det skader ikke at sætte en backslash - ud over at man kan
> forvirre efterfølgende kodere og være med til at lade en misforståelse
> overleve)
Mærkeligt. Jeg mener bare helt bestemt, at jeg havde problemer med mine
regex, når jeg brugte punktum (indtil jeg begyndte på backslash-punktum).
Men jeg kan selvfølgelig tage fejl :)
Jeg takker for rettelsen.
--
Med venlig hilsen
Kasper Johansen
| |
|
|