Formát emailu – validační pravidlo – je OK?

Kcko
Člen | 465
+
0
-

Ahoj,
dlouhodobě používám standardně addRule(Form::EMAIL).

Nikdy nebyl s ničím problém, dneska jsem si všiml, že nám padají objednávky při importu do jiného (cizího systému).

Vinou je to, že člověk zadal e-mail ve formátu aaa@˘bbb.cz a docvakl si tam nechtěný znak (nevím jestli to byl přesně tenhle nebo jiný).

Je možné, že podle RFC je to OK, podle Nette validátoru je to tento pattern

<?php

	public static function isEmail($value)
	{
		$atom = "[-a-z0-9!#$%&'*+/=?^_`{|}~]"; // RFC 5322 unquoted characters in local-part
		$alpha = "a-z\x80-\xFF"; // superset of IDN
		return (bool) preg_match("(^
			(\"([ !#-[\\]-~]*|\\\\[ -~])+\"|$atom+(\\.$atom+)*)  # quoted or unquoted
			@
			([0-9$alpha]([-0-9$alpha]{0,61}[0-9$alpha])?\\.)+    # domain - RFC 1034
			[$alpha]([-0-9$alpha]{0,17}[$alpha])?                # top domain
		\\z)ix", $value);
	}

?>

tak je možné, že to je validní znak, nicméně systém 3 strany hlásí, že doména není validní, protože to kontrolují dle TLD a celé to spadne.

Nechci rozporovat pro mě relativně složité REGEXP pravidlo, ale podle online email validátorů adresa neprojde, v tomto případě ano.

Jak se k tomu postavit?

Editoval Kcko (1. 3. 2022 10:52)

uestla
Backer | 796
+
0
-

Snad jsem to pochopil správně, ale je potřeba odlišit 2 věci:

  1. formální validitu e-mailu – tam ti pomůže Nettí validace
  2. požadavky na formát třetích stran

Nejde zachytit případnou chybu při posílání e-mailu třetí straně a přidat chybu do formuláře?

Kcko
Člen | 465
+
0
-

uestla napsal(a):

Snad jsem to pochopil správně, ale je potřeba odlišit 2 věci:

  1. formální validitu e-mailu – tam ti pomůže Nettí validace
  2. požadavky na formát třetích stran

Nejde zachytit případnou chybu při posílání e-mailu třetí straně a přidat chybu do formuláře?

Ahoj pochopil,

  1. Nepomůže, zadej si do svého formuláře `pepicek123321@˘seznam.cz` a tohle není přeci validní e-mail, nejde na něj zareagovat (je jedno jestli odpovím v Thunderbirdu nebo PHPkem)
  2. Koresponduje s 1.

Náš nákupní proces je brutálně složitý, přidávám si vlastní validační zjednodušené pravidlo něco ve smyslu

<?php
	preg_match('~.+@[A-Za-z0-9\.-]+~', $email);
?>

které je taková obezlička, aby podchytilo ty znaky co tam nemají dělat (a hlavně následuje až po Nettím validátoru).

Editoval Kcko (1. 3. 2022 11:26)

Kcko
Člen | 465
+
0
-

Už jsem to pochopil více … https://www.punycoder.com/
Ta moje adresa se převede na IDN, je to totiž stále validní doména / adresa, ale neexistující a jim to spadne, já jsem si to u sebe „ošetřil“ výše zmíněným postupem, který za mě není OK, ale jelikož 3 strana má svoje řešení napsané, nějak zvláštně (nevím proč jim spadne celý import vinou jedné „špatné“ emailové adresy), ale to budu řešit už s klientem.