Fix #2313 inconsistent email validation rules

This commit is contained in:
Kijin Sung 2024-04-17 23:15:24 +09:00
parent 61a0cf38c3
commit 848a45cabe
3 changed files with 13 additions and 3 deletions

View file

@ -211,10 +211,18 @@ class Mail extends Rhymix\Framework\Mail
* Check if param is a valid email or not
*
* @param string $email_address Email address to check
* @param bool $restrictive
* @return string
*/
public static function isVaildMailAddress($email_address)
public static function isVaildMailAddress($email_address, $restrictive = true)
{
// Restrictive mode
if ($restrictive)
{
return preg_match('/^[\w-]+((?:\.|\+|\~)[\w-]+)*@[\w-]+(\.[\w-]+)+$/', $email_address) ? $email_address : '';
}
// RFC mode
$validator = new \Egulias\EmailValidator\EmailValidator;
$rfc = new \Egulias\EmailValidator\Validation\RFCValidation;
if($validator->isValid($email_address, $rfc))

View file

@ -405,7 +405,7 @@ class VariableBase
{
case 'email':
case 'email_address':
if (!preg_match('/^[\w-]+((?:\.|\+|\~)[\w-]+)*@[\w-]+(\.[\w-]+)+$/', $value))
if (!\Mail::isVaildMailAddress($value))
{
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $column . ' must contain a valid e-mail address');
}

View file

@ -188,7 +188,9 @@ class MailTest extends \Codeception\Test\Unit
{
$this->assertEquals('devops@rhymix.org', Mail::isVaildMailAddress('devops@rhymix.org'));
$this->assertEquals('some+thing@gmail.com', Mail::isVaildMailAddress('some+thing@gmail.com'));
$this->assertEquals('weird@localhost', Mail::isVaildMailAddress('weird@localhost'));
$this->assertEquals('', Mail::isVaildMailAddress('weird@localhost'));
$this->assertEquals('weird@localhost', Mail::isVaildMailAddress('weird@localhost', false));
$this->assertEquals('', Mail::isVaildMailAddress('invalid@'));
$this->assertEquals('', Mail::isVaildMailAddress('invalid@', false));
}
}