Portál AbcLinuxu, 5. června 2025 22:13


Dotaz: PHP - kontrola mezer v řetězci

18.2.2011 15:36 Dendy
PHP - kontrola mezer v řetězci
Přečteno: 946×
Odpovědět | Admin
Ahoj, jak muzu zkontrolovat retezec, jestli se v nem neopakuje jeden znak
if (!str_replace(" ","",$_POST['asd'])) {
echo "Heslo nesmí obsahovat mezery";
}

kdyz zadam do inputu: mezera
vypis: Heslo nesmí obsahovat mezery

kdyz zadam do inputu: mezera mezera
vypis: Heslo nesmí obsahovat mezery

kdyz zadam do inputu: mezera mezera abc
vypis: zadny
Proc? jak docilit toho aby se v retezci nevyskytovala vubec mezera? ani treba 5x po sobe? Muzu to smazat v tom retezci ale v tomto pripade to musim kontrolovat

dekuji za pomoc

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

18.2.2011 15:56 Dejv | skóre: 37 | blog: Jak ten blog nazvat ... ? | Ostrava
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Odpovědět | | Sbalit | Link | Blokovat | Admin

Ahoj

Je jsem si kontrolu, zda mi heslo obsahuje pouze povolene znaky, vymyslel sam a sel jsem na to "opacne". Vsechny povolene znaky nahradim prazdnym retezcem a co mi zbude? Jen nepovolene znaky (ne jen mezera, treba znaky s interpunkci). Mozna jsem objevil kolo, ale skutecne jsem si tenhle postup "vymyslel".

Dejv
Pevně věřím, že zkušenější uživatelé mě s mými nápady usměrní a pošlou tam, kam tyto nápady patří...
18.2.2011 16:10 chrono
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Odpovědět | | Sbalit | Link | Blokovat | Admin
Čo, podľa teba, má urobiť to negovanie reťazca? (tá časť !str_replace)
18.2.2011 16:24 Dendy
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
nahradit mezeru za nic? hm.. ale kdyz je zadana jen jedna mezera tak to funguje
18.2.2011 16:45 chrono
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Tá funkcia str_replace vráti reťazec, v ktorom sú vymazané všetky medzery a nefunguje to, aspoň podľa toho čo píšeš, ani v prípade, že v tom reťazci nie je medzera.

Ak chceš hľadať v reťazci zakázané znaky, tak použi funkciu, ktorá na to slúži a teda napr. strpos. Bezpečnejšie je ale urobiť presný opak a teda testovať, či sú v tom reťazci len znaky, ktoré sú povolené.
18.2.2011 16:56 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Odpovědět | | Sbalit | Link | Blokovat | Admin
Funkce str_replace() vrací řetězec, takže nabývá hodnoty true pokud je řetězec minimálně 1 znak dlouhý, false pokud je prázdný (taková je implicitní konverze). Takže podmínka je provedena vždy pokud $_POST['asd'] obsahuje alespoň jeden ne-mezera znak.
Použít na toto fci str_replace(), je dost cool, ale fungovat to asi nebude :).
Vhodnější asi bude něco takovéhoto:
if(strpos($_POST['asd'],' ') !== false)
  echo "Heslo nesmí obsahovat mezery";

To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
Řešení 1× (trilobyte)
18.2.2011 23:36 l4m4
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Což je nejspíš i tak kravina, protože nesmí-li heslo obsahovat mezery, nemsí pravděpodobně obsahovat velkou část znaků (kontrolní, cokoli mimo ASCII, ...), takže by se mělo testovat zda obsahuje pouze povolené znaky, což lze udělat strspn() či regulárním výrazem.
19.2.2011 20:33 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Chtěl jsem tam dopsat: „Otázkou je, proč nesmí heslo obsahovat mezeru a pokud je k tomu důvod, týká se to jen mezery?“, ale pak jsem to nechal bez pátrání po důvodech…
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
Řešení 1× (trilobyte)
LangPa avatar 28.2.2011 18:10 LangPa | skóre: 12 | blog: LangPavel | Hradec Králové
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Odpovědět | | Sbalit | Link | Blokovat | Admin
preg-match je ke kontorle stringu idealni, regularni vyrazy by mel umet (alespon zaklad) kazdy ;-)

if(!preg_match('/^[a-zA-Z0-9]+$/', $heslo))
{
    echo "Heslo musi obsahovat pouze znaky a-z, A-Z nebo cislice";
}

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.