PHP Nette - validace formuláře - REGEX pravidlo pro české znaky + mezera a pomlčka

PHP Nette - validace formuláře - REGEX pravidlo pro české znaky + mezera a pomlčka

Ahoj,

mám v PHP Nette projektu formulář s inputem na jméno, který je pomocí REGEX pravidla takto validován:


$form->addText('name', 'Jméno')
->setHtmlAttribute('class', 'form-control')
->addRule(Form::MIN_LENGTH, 'Jméno musí mít alespoň %d znaky', 2)
->addRule(Form::MAX_LENGTH, 'Jméno nemůže mít více jak %d znaků', 20)
->addRule(Form::PATTERN, 'Jméno obsahuje nepovolené znaky.', '[a-zA-ZáčďéěíňóřšťůúýžÁČĎÉĚÍŇÓŘŠŤŮÚÝŽ]+[ \-]?')
->setRequired('Zadejte jméno');


Na typická česká jména to je vyhovující, ale na dvě jména či jména s pomlčkou to nevyhovuje. Jak bych měl to REGEX pravidlo upravit, aby tam mohla být mezera a pomlčka?

Díky


ODPOVĚĎ


Ahoj,

abys v tom Nette formuláři měl regularní plavidlo i na pomlčku, tak bys mohl REGEX upravit takto:

REGEX - může obsahovat pomlčku (minus)
[a-zA-ZáčďéěíňóřšťůúýžÁČĎÉĚÍŇÓŘŠŤŮÚÝŽ-]

REGEX - mezera (space)
+[\w ]

S touto definicí formu s tímto regulárem bys mohl být spokojený:

$form->addText('name', 'Jméno')
->setHtmlAttribute('class', 'form-control')
->addRule(Form::MIN_LENGTH, 'Jméno musí mít alespoň %d znaky', 2)
->addRule(Form::MAX_LENGTH, 'Jméno nemůže mít více jak %d znaků', 20)
->addRule(Form::PATTERN, 'Jméno obsahuje nepovolené znaky.', '[a-zA-ZáčďéěíňóřšťůúýžÁČĎÉĚÍŇÓŘŠŤŮÚÝŽ-]+[\w ]+[ \-]?')
->setRequired('Zadejte jméno');


Ale nejlepší bude tento regulární výraz (projde i více jmen za sebou), takže resumé je:

$form->addText('name', 'Jméno')
->setHtmlAttribute('class', 'form-control')
->addRule(Form::MIN_LENGTH, 'Jméno musí mít alespoň %d znaky', 2)
->addRule(Form::MAX_LENGTH, 'Jméno nemůže mít více jak %d znaků', 20)
->addRule(Form::PATTERN, 'Jméno obsahuje nepovolené znaky.', '[ ./a-zA-ZáčďéěíňóřšťůúýžÁČĎÉĚÍŇÓŘŠŤŮÚÝŽ-]+[ \-]?')
->setRequired('Zadejte jméno');

Jak se ti článek líbil?

Komentáře (2)

Pepa Schwarz
Dobrý den,

mám nette form jako kontaktní formulář (contactForm) a mám tam přílohu:

$form->addUpload(self::ATTACHMENT, 'Příloha')
->addRule($form::MaxFileSize, 'Maximum size is 10 MB', 10 * 1024 * 1024);

Po odeslání formu se odesílá soubor v příloze emailu. Když dám jako cestu:
$file->getTemporaryFile()

Tak se soubor do emailu pošle, ale jelikož je to tmp soubor, tak nemá korektní název a koncovku. Jak to vyřešit?

Díky
Hanz
Dobrý den,

pro správný název je třeba soubor zpracovat takto:

/** @var FileUpload $file */
$file = $values[ContactForm::ATTACHMENT];
// udělat z tmp file korektní soubor s názvem
$filePath = '/tmp/'. $file->getSanitizedName();
// přesun pojmenovaného souboru do /tmp
$file->move($filePath);

Do emailu pak stačí předat $filePath .

Přidat komentář