webForumDet fria alternativet

regexp 1-5 och whitespace

PHPur PHP

4 svar · 506 visningar · startad av herq

Medlem sedan aug. 2000238 inlägg
Frågan#1

Jag skulle behöva en funktion/regexp som returnerar true om den kollar igenom en sträng och inte hittar någonting annat än siffrorna 1 2 3 4 5, och mellanslag.

Nedanstående skulle alltså returnera false eftersom "skcdms wlk" inte passar in.

pattern = "1-5 ";
content = "5 2 3 skcdms wlk"

if ($pattern, $content)) {
    echo "japp, inga otillåtna tecken här inte!";
    return true;
} else {
    echo "nej det funkade inte";
    return false;
}

hoppas nån fattar.

Medlem sedan juni 20034 013 inlägg
#2

Det känns onödigt att använda regexp för en sån enkel grej. Regexp är ju mer om man leter efter ett mönster.

<?
  function Check($s)
  {
    for ($i = 0; $i < strlen($s); $i++)
    {
      $c = ord(substr($s, $i, 1));
      if (($c != 32) && ($c < 49 || $c > 53))
        return false;
    }
    return true;
  }
?>
Medlem sedan sep. 20021 655 inlägg
#3

tydal skrev:

Det känns onödigt att använda regexp för en sån enkel grej. Regexp är ju mer om man leter efter ett mönster.

Förvisso går det säkerligen snabbare att använda din metod, men koden blir betydligt mer svårläst. Man kan inte räkna med att programmerare kan ASCII-tabellen utantill :)

Medlem sedan juni 20034 013 inlägg
#4

Ja, tyvärr blir den lite mer svårläst i Php. Egentligen ska den ju se ut så här:

int Check(char *s)
{
  int i;
  for (i = 0; i < strlen(s); i++)
  { 
    if (s[i] != ' ' && (s[i] < '1' || s[i] > '5'))
      return 0;
  }
  return 1;
}

Men viktiga delar av ASCII-tabellen ska man kunna utantill. Annars är man ingen programmare. Dit hör mellanslag, tab, escape, cr, lf samt siffrorna och bokstäverna. Det är det minsta man kan begära. Och det ska man kunna åtminstone i hex men helst binärt också. Eller tja, kan man det i hex kan man det ju automatiskt binärt också, för det är ju grundläggande att kunna göra om hex till binärt och tvärtom i huvudet.

Medlem sedan juni 20015 009 inlägg
#5

Har man minnesproblem med att komma ihåg ascii-tabellen finns https://www.asciitable.com/ . :)

/r Annars bör något sådant här också fungera:

function ($string)
{
      return (bool)preg_match('/(^[1-5 ]$)/i', $string);
}
263 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
127 ms — hämta statistik (db)
134 ms — hämta tråd, inlägg och bilagor (db)