[gnome-maps/wip/mlundblad/add-email-and-takeaway: 3/12] utils: Add function to validate e-mail addresses




commit 534fe332e2eacbb002edd1518d9fcf988089fae7
Author: Marcus Lundblad <ml update uu se>
Date:   Tue Apr 27 22:50:12 2021 +0200

    utils: Add function to validate e-mail addresses

 src/utils.js       | 12 ++++++++++++
 tests/utilsTest.js |  9 +++++++++
 2 files changed, 21 insertions(+)
---
diff --git a/src/utils.js b/src/utils.js
index 1f40746a..64ff9dae 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -42,6 +42,9 @@ const IMPERIAL_LOCALES = ['unm_US', 'es_US', 'es_PR', 'en_US', 'yi_US'];
 // Matches all unicode stand-alone accent characters
 const ACCENTS_REGEX = /[\u0300-\u036F]/g;
 
+// Regex matching e-mail addresses
+const EMAIL_REGEX=/^[^\s@]+@[^\s@]+\.[^\s@]+$/
+
 const _integerFormat = new Intl.NumberFormat([], { maximumFractionDigits: 0 });
 const _integerTwoDigitFormat =
     new Intl.NumberFormat([], { minimumIntegerDigits: 2,
@@ -468,6 +471,15 @@ function isValidWebsite(website) {
     return website.startsWith("http://";) || website.startsWith("https://";);
 }
 
+/* Determine whether a string is a valid e-mail address. */
+function isValidEmail(email) {
+    // if it starts with 'mailto:', it's probably a mistake copy-pasting a URI
+    if (email.startsWith('mailto:'))
+        return false;
+
+    return email.match(EMAIL_REGEX) !== null;
+}
+
 /* Return string with first character in upper case according the rules
  * determined by the current locale
  */
diff --git a/tests/utilsTest.js b/tests/utilsTest.js
index 80fe3dc9..33801860 100644
--- a/tests/utilsTest.js
+++ b/tests/utilsTest.js
@@ -38,6 +38,7 @@ function main() {
     prettyDistanceTest();
     normalizeStringTest();
     validWebsiteTest();
+    validEmailTest();
     firstToLocaleUpperCaseTest();
 }
 
@@ -112,6 +113,14 @@ function validWebsiteTest() {
     JsUnit.assertEquals(false, Utils.isValidWebsite("https:gnome.org"));
 }
 
+function validEmailTest() {
+    JsUnit.assertTrue(Utils.isValidEmail('mail example com'));
+    JsUnit.assertTrue(Utils.isValidEmail('information.here@company.store'));
+    JsUnit.assertTrue(Utils.isValidEmail('我買@屋企.香港'));
+    JsUnit.assertFalse(Utils.isValidEmail('mailto:mail example com'));
+    JsUnit.assertFalse(Utils.isValidEmail('mail@no-tld'));
+}
+
 function firstToLocaleUpperCaseTest() {
     JsUnit.assertEquals('Xxx', Utils.firstToLocaleUpperCase('xxx'));
     JsUnit.assertEquals('Xxx', Utils.firstToLocaleUpperCase('Xxx'));


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]