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

Co nejvíce stručné řešení pro vývojáře a linux administrátory

Na superuser.cz nenaleznete žádný zbytečný obsah, vždy se jde přímo k věci, denně se zde objevují nové problémy a jejich řešení...

Začít používat

PHP Nette - validace formuláře - REGEX…

23.01.2020 napsal Azurit

Vyřešeno PHP Nette - form validation - REGEX rule for czech characters + space and dash
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

PHP Nette - form validation - REGEX rule for czech characters + space and dash

Hi,

I have a form with a name input in PHP Nette project, which is validated by REGEX rule:


$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');


For typical Czech names it is satisfactory, but for two names or names with a dash it does not suit. How should I modify the REGEX rule so that there can be a space and a dash?

Thanks

Zobrazit odpovědi

Nejlépe hodnocení uživatelé
Hanz

Počet UP: 5096

React: 215

Rusty

Počet UP: 2354

React: 100

OL3G

Počet UP: 1638

React: 60

Strosmajer

Počet UP: 496

React: 23

SYSTEM

Počet UP: 440

React: 23

Oxytocin

Počet UP: 298

React: 18

Hyacint

Počet UP: 40

React: 12

RE: PHP Nette - validace…

04.02.2020 odpověděl Hyacint (update 04.02.2020)

Zkontrolováno

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');

PHP Nette - form validation - REGEX rule for czech characters + space and dash

Hi,

so that you have a regular vessel in the Nette form, even for a dash, you could adjust REGEX as follows:

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

REGEX - space
+[\w ]

You could be happy with this definition of the form with this regular:

$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');


But the best thing to do is this regular expression (it goes through multiple names in a row), so the resume is:

$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');

Tento web používá k poskytování služeb, personalizaci reklam a analýze návštěvnosti soubory cookie. Používáním tohoto webu s tím souhlasíte. Další informace