Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: regularni vyrazy

Aktivity
Avatar
maxy obr
Člen
Avatar
maxy obr:27.8.2014 0:22

Zdravím mám problém s regulárním výrazem.
Pokud chci zakázat určité znaky

$kontrola='#[^/$_]#';
       if(preg_match($kontrola,$jmeno)

Ale chybu to vypíše jen v případě, že jsou tam znaky samotné.
Pokud tedy zadám Franta_$ podmínka projde v pořádku.
Potřeboval bych vyřešit jak určité znaky zakázat absolutně.
A když už jsme u toho rada jaké znaky jsou nebezpečné a měli by se zakazovat by se mi hodila :D
Díky

 
Odpovědět
27.8.2014 0:22
Avatar
Patrik Smělý
Tvůrce
Avatar
Patrik Smělý:27.8.2014 0:29

Ahoj, pokud chceš uklízet vstupy od uživatele, je asi nejlepší si na to udělat funkci. Něco jsem rychle sepsal.

        if(!get_magic_quotes_gpc())
        $message = addslashes($message);
        $message = strip_tags($message);
        $message = htmlentities($message);
  mysql_real_escape_string($message); - toto jen pokud používáš Mysql ovladač.
        return trim($message);
}

a pak to jednoduše použij

$text1 = clear($text);
Editováno 27.8.2014 0:31
 
Nahoru Odpovědět
27.8.2014 0:29
Avatar
Patrik Smělý
Tvůrce
Avatar
Patrik Smělý:27.8.2014 0:45
  function clear($message)
{
        if(!get_magic_quotes_gpc())
        $message = addslashes($message);
        $message = strip_tags($message);
        $message = htmlentities($message);
  mysql_real_escape_string($message);
        return trim($message);
}

takle je to celá funkce sorry.

 
Nahoru Odpovědět
27.8.2014 0:45
Avatar
maxy obr
Člen
Avatar
maxy obr:27.8.2014 1:09

Diky ale tohle ošetřené mám, jde o to že při vytvoření se mi z toho udělá URL adresa a ta je nefunkční pokud jsou tam některé znaky nevím přesně které ošetřuji to prvně.
Pokud mám například clanek.php?cla­nek=sda/_"asd$ nazev clanku ktery vklada uzivatel je sda/_"asd$ a v tomto případě se url načte chybně.
Tak mě napadlo znaky zakázat ale nevím jak.

 
Nahoru Odpovědět
27.8.2014 1:09
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na maxy obr
Patrik Smělý:27.8.2014 1:31

Však to taky prožeň ten get clearem, a ty znaky zmizí.

 
Nahoru Odpovědět
27.8.2014 1:31
Avatar
maxy obr
Člen
Avatar
maxy obr:27.8.2014 3:00

Jasně díky to mi nedošlo.

 
Nahoru Odpovědět
27.8.2014 3:00
Avatar
Odpovídá na maxy obr
Uživatel sítě :27.8.2014 16:41

Tohle by také mohlo fungovat:

<?php

$znaky = '\/_\$';
if(preg_match("~([$znaky])+~", $text) == 1){
    echo 'Obsahuje zakázané znaky.';
}

Jelikož $ má v reguláru funkci tak mu musíš vrátit původní význam tím '\' to samé si můžeš všimnout i u '/'.

Pokud tedy řetězec bude obsahovat /, _ či $ bude to chyba.

Editováno 27.8.2014 16:43
Nahoru Odpovědět
27.8.2014 16:41
Chybami se člověk učí, běžte se učit jinam!
Avatar
Bertram
Člen
Avatar
Odpovídá na maxy obr
Bertram:28.8.2014 13:53

Znak stříška nesmí být v tomto případě jako první, protože pak to znamená, že očekáváš pouze řetězec /$_

Možná úprava:

<?php
$jmeno = 'Franta_$';
$kontrola='#[/$_^]#';
if(preg_match($kontrola,$jmeno)){
        echo"Neplatný vstup";
}

V žádném případě ti nedoporučuji výše uvedenou funkci clear, to je etalon toho, jak se to nemá dělat.

Editováno 28.8.2014 13:55
 
Nahoru Odpovědět
28.8.2014 13:53
Avatar
maxy obr
Člen
Avatar
Odpovídá na Bertram
maxy obr:28.8.2014 18:53

no co já vím

'#[a]#';

znamená musí obsahovat minimálně jeden uvedený znak tedy a

'#[^a]#';

-> nesmí obsahovat

'#^[a]#';

-> musí začínat

Editováno 28.8.2014 18:54
 
Nahoru Odpovědět
28.8.2014 18:53
Avatar
maxy obr
Člen
Avatar
Odpovídá na maxy obr
maxy obr:28.8.2014 19:32

Což je další věc co sem nedomyslel proc mi to musí docházet tak pomalu...
V tom řípadě je tohle správně

$jmeno = 'Franta_$';
$kontrola='#[/$_^]#';
if(preg_match($kontrola,$jmeno)){
       echo"Neplatný vstup";
}

A ještě se zeptám proč je ten clear nevhodý i když ty znaky vyloučím neměli by se vstupy ošetřovat mysql_real_es­cape_string a htmlspecialchars používám vždy

Editováno 28.8.2014 19:32
 
Nahoru Odpovědět
28.8.2014 19:32
Avatar
Bertram
Člen
Avatar
Odpovídá na maxy obr
Bertram:28.8.2014 20:07

Proč a kdy se escapuje si přečti na phpfashion.com/es­capovani-definitivni-prirucka.

Editováno 28.8.2014 20:08
 
Nahoru Odpovědět
28.8.2014 20:07
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.