webForumDet fria alternativet

Blanksteg i preg_match

PHP

2 svar · 384 visningar · startad av webbmannen

Medlem sedan dec. 1999826 inlägg
Frågan#1

Hej på er,

Jag sitter och snickrar på ett anmälningsformulär och där har jag tänkt att stoppa felaktigheter med hjälp av preg_match.

Nu har jag letat en bra stund efter en lösning som ger rätt till ett blanksteg mellan namndelar men inte rätt till att göra fler än ett blanksteg. Som det är nu släpper den igenom ett blanksteg men även flera i rad, vilket ger möjlighet att fylla i formuläret med endast blanksteg = fel.

Min kod ser ut så här just nu:

if ($_POST['company']== '' || !preg_match('/^[a-zåäö\' ]{3,}$/i', $_POST['company'])) {

Hur löser man detta? Kan någon sedan förklara delarna ^ och $ för mig så blir det bonus för det.

/webb

Medlem sedan mars 20034 471 inlägg
#2

webbmannen skrev:

Hur löser man detta? Kan någon sedan förklara delarna ^ och $ för mig så blir det bonus för det.

^ först i uttrycket betyder att uttrycket börjar här.
$ betyder att uttrycket slutar här.
Exempel /^anna$/ matchar bara anna medan /anna$/ även matchar panna, skanna, .... och /anna/ även matchar annat, skannade, et c....

Jag hade löst ditt problem med två matchningar

if ($_POST['company']== '' ||
            !preg_match('/^[a-zåäö \' ]{3,}$/i', $_POST['company'] ||
            preg_match('/[ ]{2,}/i', $_POST['company'] )

Dvs tillåt mellanslag men kolla att man inte har fler än en i följd någonstans i uttrycket med nytt preg_match.

Alternativt, om du bara vill stoppa endast mellanslag men inte har något att invända mot
"a<5 mellanslag>b" så kan du göra så här:

$_POST['company'] = trim($_POST['company']); 
if ($_POST['company']== '' ||
    !preg_match('/^[a-zåäö \' ]{3,}$/i', $_POST['company'])

trim tar bort whitespace (blanka, tab och dylikt) först och sist i uttrycket.

Medlem sedan dec. 1999826 inlägg
#3

Hej och tack aasah,

Dina lösningar funkar bra och jag har nu lite bättre kläm på detta. Samtidigt så har jag med lite distans till problematiken insett att man kan hålla på med dessa styrningar in i absurdum. Lagom är nog bäst ;)

/webb

252 ms totalt · 3 externa anrop · v20260731065814-full.767b4345
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)