Avatar billede c4y Nybegynder
05. juni 2007 - 18:54 Der er 11 kommentarer

Kun tal og bogstaver i streng.

Undskyld, jeg har ledt hele Eksperten igennem efter noget der kunne virke - men kan ikke få det til det.

Jeg skal bruge en funktion der checker om bogstaver og tal findes.

Den SKAL checke om de første 5 tegn er: "STEAM", og så skal den checke om der er mindst 6 tal i. Og strengen må ikke være mindre end: 14 tegn.

Nogen der kan komme op med et forslag?
Avatar billede 0xffff Nybegynder
05. juni 2007 - 23:16 #1
$test = "STEAM123456afg";

if (preg_match("/^STEAM\d{6,}\D{3,}/i", $test))
{
    echo "Din string indeholder alle kriterier";
}
else
{
    echo "Fejl";
}
Avatar billede 0xffff Nybegynder
05. juni 2007 - 23:31 #2
hmmm.... læste opgaven lidt forkert. Så kun dele af ovenstående er rigtigt.

Kigger lige lidt mere på den og svarer :P
Avatar billede 0xffff Nybegynder
05. juni 2007 - 23:53 #3
Nu er jeg ikke helt så god til regex som jeg gerne ville være, så det er muligt at det er muligt at lave det hele i en preg_match. Men nedenstående skulle kunne klare de ting du stillede op.

$test = "STEAM1a2b3c4d5e6f";

$z = 0;
for ($i=0; $i<strlen($test); $i++)
{
    if(is_numeric(substr($test, $i, 1)))
    {
        $z++;
    }
}

if ((preg_match("/^STEAM/i", $test)) && ($z > 5) && (strlen($test) > 13))
{
    echo "rigtig";
}
else
{
    echo "forkert";
}
Avatar billede jakobdo Ekspert
06. juni 2007 - 08:09 #4
Hvis du har ctype() på din box/webhotel, så kig på: ctype_alnum()
Avatar billede jakobdo Ekspert
06. juni 2007 - 08:10 #5
Se bort fra mit svar.
Avatar billede coderdk Praktikant
06. juni 2007 - 09:56 #6
Er det ikke preg_match("/STEAM_\d:\d:\d+/", $steamid) ?

Altså, ID'erne ser sådan ud: STEAM_0:0:2512071 ikke?
Avatar billede jakobdo Ekspert
06. juni 2007 - 10:10 #7
Jeg mener du har ret coderdk, at det er sådan STEAM ID'erne ser ud jo.
Avatar billede c4y Nybegynder
06. juni 2007 - 17:35 #8
Jeg stykkede lige det svar sammen 0xffff, og coderdk kom med - så det blev til:

$steamid = $_POST[steamid];

$z = 0;
for ($i=0; $i<strlen($steamid); $i++)
{
    if(is_numeric(substr($steamid, $i, 1)))
    {
        $z++;
    }
}

if ((preg_match("/STEAM_\d:\d:\d+/", $steamid)) && ($z > 5) && (strlen($steamid) > 13))
{
    echo "rigtig";
}
else
{
    echo "forkert";
}


Det virker. Smid et svar begge.
Avatar billede coderdk Praktikant
06. juni 2007 - 17:45 #9
Ok (c:
Avatar billede 0xffff Nybegynder
06. juni 2007 - 17:51 #10
super
Avatar billede coderdk Praktikant
06. juni 2007 - 18:36 #11
Har du prøvet med noget i stil med:

if ( preg_match("/STEAM_\d:\d:\d{3,8}/", $steamid) )
{
    echo "rigtig";
}
else
{
    echo "forkert";
}

Den godtager STEAM IDs i formatet STEAM_x:x:y hvor der kan være 1 x-tal og 3-8 y-tal, i.e. STEAM_0:1:234 og STEAM_0:1:23456789 vil være gyldige - Du kan selv justere {3,8} evt ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester