From ba2598fae1d2164ce06ba197cc7e86a11f8402b3 Mon Sep 17 00:00:00 2001 From: Jared Hancock <jared@osticket.com> Date: Mon, 10 Mar 2014 22:20:30 -0500 Subject: [PATCH] lint: Add email address validation --- include/class.validator.php | 3 ++- setup/test/tests/test.validation.php | 33 ++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/include/class.validator.php b/include/class.validator.php index 62ce68153..74e13f983 100644 --- a/include/class.validator.php +++ b/include/class.validator.php @@ -137,7 +137,8 @@ class Validator { /*** Functions below can be called directly without class instance. Validator::func(var..); (nolint) ***/ function is_email($email) { - return preg_match('/^([*+!.&#$|\'\\%\/0-9a-z^_`{}=?~:-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})$/i',$email); + require_once PEAR_DIR.'Mail/RFC822.php'; + return !PEAR::isError(Mail_RFC822::parseAddressList($email)); } function is_phone($phone) { /* We're not really validating the phone number but just making sure it doesn't contain illegal chars and of acceptable len */ diff --git a/setup/test/tests/test.validation.php b/setup/test/tests/test.validation.php index 942767329..20b1eae9a 100644 --- a/setup/test/tests/test.validation.php +++ b/setup/test/tests/test.validation.php @@ -15,6 +15,39 @@ class TestValidation extends Test { $this->assert(Validator::is_username('中国期刊全文数据')); // Non-letters $this->assert(!Validator::is_username('j®red')); + // Special chars + $this->assert(Validator::is_username('jar.ed')); + $this->assert(Validator::is_username('jar_ed')); + $this->assert(Validator::is_username('jar-ed')); + // Illegals + $this->assert(!Validator::is_username('j red')); + $this->assert(!Validator::is_username('jared ')); + $this->assert(!Validator::is_username(' jared')); + } + + function testValidEmail() { + // Common emails + $this->assert(Validator::is_email('jared@domain.tld')); + $this->assert(Validator::is_email('jared12@domain.tld')); + $this->assert(Validator::is_email('jared.12@domain.tld')); + $this->assert(Validator::is_email('jared_12@domain.tld')); + $this->assert(Validator::is_email('jared-12@domain.tld')); + + // Very likely illegal + $this->assert(!Validator::is_email('jared r@domain.tld')); + $this->assert(Validator::is_email('jared@host')); + + // Odd cases, but legal + $this->assert(Validator::is_email('jared@[127.0.0.1]')); + $this->assert(Validator::is_email('jared@[ipv6:::1]')); + $this->assert(Validator::is_email('*@domain.tld')); + $this->assert(Validator::is_email("'@domain.tld")); + $this->assert(Validator::is_email('"jared r"@domain.tld')); + + // RFC 6530 + #$this->assert(Validator::is_email('Pelé@example.com')); + #$this->assert(Validator::is_email('δοκιμή@παράδειγμα.δοκιμή')); + #$this->assert(Validator::is_email('甲斐@黒川.日本')); } } return 'TestValidation'; -- GitLab