Negace regularniho vyrazu v textArea pattern

Duchy
Člen | 7
+
0
-

Zdravím,

potřebuji zakázat jakékoli emaily v textArea.

Zkoušel jsem to takto, což je korektní regex výraz, který vyhledává email pattern, ale tady nefunguje..

->addRule(Form::PATTERN, ‚No email please‘, ‚/^[^@]@[^@]\.[^@]*$/‘);

Děkuji za pomoc

Editoval Duchy (15. 4. 2017 14:58)

CZechBoY
Člen | 3608
+
0
-

Zkus negaci pres vlnovku

$form->addRule(~Form::PATTERN, ...)
Duchy
Člen | 7
+
0
-

Negative validation rules such as ~Form::PATTERN are deprecated.

Duchy
Člen | 7
+
+1
-

Tak jsem to trochu obešel a vyřešil následovně:

(?!.*@.*\..*).+

ale teď mi to nefunguje pro multiline. Nějaký nápad?

CZechBoY
Člen | 3608
+
0
-

Tak zkus negaci emailu

$form->addRule(~Form::EMAIL, ...);
duke
Člen | 650
+
0
-

Vždycky si můžeš napsat vlastní validační pravidlo (pro validaci v php i v js).

Duchy
Člen | 7
+
0
-

Tak zkoušim si udělat vlastní. Tedy vytvořím si funkci (nikoli metodu) ve stejnem presenteru jako formulář. Poté když zavolám:

function testForEmail($item, $arg)
{
    return preg_match('/.*@.*\..*/', $item);
}

abstract class BasePresenter extends Nette\Application\UI\Presenter
{
.
->addRule('testForEmail', 'Please remove any email from description..');
.
}

Dostávám „Unknown validator ‚testForEmail‘ for control ‚inputTextArea‘.“

jiri.pudil
Nette Blogger | 1028
+
+1
-

Nejspíš tu funkci definuješ v nějakém jmenném prostoru (tj. na začátku souboru máš namespace). Pak musíš jako callback uvést plné jméno:

->addRule('My\Namespace\testForEmail', '...');
Duchy
Člen | 7
+
0
-

Super už to chybu nehazí, ale nefunguje validace. Je možné tu validační funkci udělat tak, jak jsem posílal? Potřebuji ji použít na celý obsah textArea.

function testForEmail($item, $arg)
{
    return preg_match('/.*@.*\..*/', $item);
}

abstract class BasePresenter extends Nette\Application\UI\Presenter
{
..
$form->addTextArea('description', 'Please describe')->addRule('app\presenters\testForEmail', $this->translator->trans('Please remove any email from description..'));
}
CZechBoY
Člen | 3608
+
0
-

Co je cely obsah textarea? Jako rozdeleny email na 2 radcich?

Duchy
Člen | 7
+
0
-

V té textArea může být úplně cokoli. Je to popis nabidky, do kterého mi lidé dávají i emaily a to já nechci.

Mám tam i 12 řádkový „sloh“, opravdu pečlivě zpracovaný popis nabídky.

Takže vedle znaků i newline atd.

CZechBoY
Člen | 3608
+
0
-

Furt nechápu problém. Ten regulár přeci najde email v jakkoli zanořeném textu (pokud bude na jednom řádku).

duke
Člen | 650
+
0
-

V té validační funkci bys měl vracet spíš negaci toho, co vracíš. Validační funkce má vracet TRUE, pokud je pravidlo splněno. A ty zavádíš pravidlo „nesmí obsahovat email“, nikoli „má obsahovat email“. Proto také doporučuji funkci přejmenovat na něco jako „mustNotContainEmail“ (testForEmail je nejednoznačné).