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 * Check if param is a valid email or not
* *
* @param string $email_address Email address to check * @param string $email_address Email address to check
* @param bool $restrictive
* @return string * @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; $validator = new \Egulias\EmailValidator\EmailValidator;
$rfc = new \Egulias\EmailValidator\Validation\RFCValidation; $rfc = new \Egulias\EmailValidator\Validation\RFCValidation;
if($validator->isValid($email_address, $rfc)) if($validator->isValid($email_address, $rfc))

View file

@ -405,7 +405,7 @@ class VariableBase
{ {
case 'email': case 'email':
case 'email_address': 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'); 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('devops@rhymix.org', Mail::isVaildMailAddress('devops@rhymix.org'));
$this->assertEquals('some+thing@gmail.com', Mail::isVaildMailAddress('some+thing@gmail.com')); $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@'));
$this->assertEquals('', Mail::isVaildMailAddress('invalid@', false));
} }
} }