/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408524
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste