Autor Zpráva
nevimsvejmeno
Profil *
Ahoj, potreboval bych poradit. Potrebuju reg. vyraz pro toto pravidlo

Jedna se o retezec, ktery muze byt az 0- 50 znaku
Muze obsahovat pismena + cisla + pomlcky + tecky
Ale nesmi obsahovat jen pomlcky a tecky nebo jen jedno z toho samostatne
A nesmi obsahovat dve a vice tecek ci pomlcek zasebou, ale muze jich byt vicero v celem retezci
A nesmi koncit ci zacinat teckou a pomlckou

takze napriklad validni je "ahoj-ahoj" "ahoj" "ahoj.ahoj-test"
a nevalidni by byl ".ahoj" "ahoj." "." ".-" "-" "moje-" "moje." "jak.-se-mas" "jak-.se-mas"

diky

Moderátor Majkl578: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou.
ShiraNai7
Profil
Jedním reg. výrazem tohle všechno asi nepůjde.

Ale jde na to udělat jednoduchá funkce:

function kontrola($str)
{
    if(preg_match('~^[a-zA-Z0-9][0-9a-zA-Z.\-]{0,48}[a-zA-Z0-9]$~', $str) !== 1) return false; // povolene znaky a delka
    if(preg_match('~[.\-][.\-]~', $str) !== 0) return false; // opakovani .-
    return true; // vse ok
}


edit: ještě jsem funkci zkrátil.. o dost

A tu test, že funguje jak má:

var_dump(
    kontrola('ahoj-ahoj'),
    kontrola('ahoj'),
    kontrola('ahoj.ahoj-test'),
    kontrola('.ahoj'),
    kontrola('ahoj.'),
    kontrola('.'),
    kontrola('.-'),
    kontrola('-'),
    kontrola('moje-'),
    kontrola('moje.'),
    kontrola('jak.-se-mas'),
    kontrola('jak-.se-mas')
);


Výsledek:

bool(true)
bool(true)
bool(true)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
king26
Profil
/^[a-z0-9]+([.\-][a-z0-9]+)*$/i


délku otestuješ pomocí mb_strlen()

Místo a-z0-9 si můžeš dát co potřebuješ aby prošlo.
nevimsvejmeno
Profil *
Dekuji, funguje reseni od kinga:), lock pls
Moderátor Joker: My tu nezamykáme vlákna když řešení autorovi stačí. Občas později někdo přijde s ještě lepším, nějakou užitečnou poznámkou, nebo doplňujícím dotazem k problému.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0