mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
Make ISEMAIL and ISURL more flexible for longer TLD (#834)
Allow TLD of length up to 24 in ISEMAIL
This commit is contained in:
parent
36ade2bfd0
commit
6ff4f43b07
@ -23,7 +23,7 @@ export const UP_TRIANGLE = '\u25B2';
|
|||||||
export const DOWN_TRIANGLE = '\u25BC';
|
export const DOWN_TRIANGLE = '\u25BC';
|
||||||
|
|
||||||
const EMAIL_RE = new RegExp("^\\w[\\w%+/='-]*(\\.[\\w%+/='-]+)*@([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z" +
|
const EMAIL_RE = new RegExp("^\\w[\\w%+/='-]*(\\.[\\w%+/='-]+)*@([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z" +
|
||||||
"0-9])?\\.)+[A-Za-z]{2,6}$", "u");
|
"0-9])?\\.)+[A-Za-z]{2,24}$", "u");
|
||||||
|
|
||||||
// Returns whether str starts with prefix. (Note that this implementation avoids creating a new
|
// Returns whether str starts with prefix. (Note that this implementation avoids creating a new
|
||||||
// string, and only checks a single location.)
|
// string, and only checks a single location.)
|
||||||
|
@ -257,7 +257,8 @@ _email_regexp = re.compile(
|
|||||||
([A-Za-z0-9] # Each part of hostname must start with alphanumeric
|
([A-Za-z0-9] # Each part of hostname must start with alphanumeric
|
||||||
([A-Za-z0-9-]*[A-Za-z0-9])?\. # May have dashes inside, but end in alphanumeric
|
([A-Za-z0-9-]*[A-Za-z0-9])?\. # May have dashes inside, but end in alphanumeric
|
||||||
)+
|
)+
|
||||||
[A-Za-z]{2,6}$ # Restrict top-level domain to length {2,6}. Google seems
|
[A-Za-z]{2,24}$ # Restrict top-level domain to length {2,24} (theoretically,
|
||||||
|
# the max length is 63 bytes as per RFC 1034). Google seems
|
||||||
# to use a whitelist for TLDs longer than 2 characters.
|
# to use a whitelist for TLDs longer than 2 characters.
|
||||||
""", re.UNICODE | re.VERBOSE)
|
""", re.UNICODE | re.VERBOSE)
|
||||||
|
|
||||||
@ -289,7 +290,8 @@ def ISEMAIL(value):
|
|||||||
>>> ISEMAIL("john@aol...com")
|
>>> ISEMAIL("john@aol...com")
|
||||||
False
|
False
|
||||||
|
|
||||||
More tests:
|
More tests: Google Sheets Grist
|
||||||
|
------------- -----
|
||||||
>>> ISEMAIL("Abc@example.com") # True, True
|
>>> ISEMAIL("Abc@example.com") # True, True
|
||||||
True
|
True
|
||||||
>>> ISEMAIL("Abc.123@example.com") # True, True
|
>>> ISEMAIL("Abc.123@example.com") # True, True
|
||||||
@ -314,6 +316,10 @@ def ISEMAIL(value):
|
|||||||
True
|
True
|
||||||
>>> ISEMAIL("Bob_O'Reilly+tag@example.com") # False, True
|
>>> ISEMAIL("Bob_O'Reilly+tag@example.com") # False, True
|
||||||
True
|
True
|
||||||
|
>>> ISEMAIL("marie@isola.corsica") # False, True
|
||||||
|
True
|
||||||
|
>>> ISEMAIL("fabio@disapproved.solutions") # False, True
|
||||||
|
True
|
||||||
>>> ISEMAIL(u"фыва@mail.ru") # False, True
|
>>> ISEMAIL(u"фыва@mail.ru") # False, True
|
||||||
True
|
True
|
||||||
>>> ISEMAIL("my@baddash.-.com") # True, False
|
>>> ISEMAIL("my@baddash.-.com") # True, False
|
||||||
@ -324,8 +330,6 @@ def ISEMAIL(value):
|
|||||||
False
|
False
|
||||||
>>> ISEMAIL("john@-.com") # True, False
|
>>> ISEMAIL("john@-.com") # True, False
|
||||||
False
|
False
|
||||||
>>> ISEMAIL("fabio@disapproved.solutions") # False, False
|
|
||||||
False
|
|
||||||
>>> ISEMAIL("!def!xyz%abc@example.com") # False, False
|
>>> ISEMAIL("!def!xyz%abc@example.com") # False, False
|
||||||
False
|
False
|
||||||
>>> ISEMAIL("!#$%&'*+-/=?^_`.{|}~@example.com") # False, False
|
>>> ISEMAIL("!#$%&'*+-/=?^_`.{|}~@example.com") # False, False
|
||||||
@ -391,7 +395,8 @@ _url_regexp = re.compile(
|
|||||||
([A-Za-z0-9] # Each part of hostname must start with alphanumeric
|
([A-Za-z0-9] # Each part of hostname must start with alphanumeric
|
||||||
([A-Za-z0-9-]*[A-Za-z0-9])?\. # May have dashes inside, but end in alphanumeric
|
([A-Za-z0-9-]*[A-Za-z0-9])?\. # May have dashes inside, but end in alphanumeric
|
||||||
)+
|
)+
|
||||||
[A-Za-z]{2,6} # Restrict top-level domain to length {2,6}. Google seems
|
[A-Za-z]{2,24} # Restrict top-level domain to length {2,24} (theoretically,
|
||||||
|
# the max length is 63 bytes as per RFC 1034). Google seems
|
||||||
# to use a whitelist for TLDs longer than 2 characters.
|
# to use a whitelist for TLDs longer than 2 characters.
|
||||||
([/?][-\w!#$%&'()*+,./:;=?@~]*)?$ # Notably, this excludes <, >, and ".
|
([/?][-\w!#$%&'()*+,./:;=?@~]*)?$ # Notably, this excludes <, >, and ".
|
||||||
""", re.VERBOSE)
|
""", re.VERBOSE)
|
||||||
@ -437,6 +442,8 @@ def ISURL(value):
|
|||||||
True
|
True
|
||||||
>>> ISURL("http://foo.com/!#$%25&'()*+,-./=?@_~")
|
>>> ISURL("http://foo.com/!#$%25&'()*+,-./=?@_~")
|
||||||
True
|
True
|
||||||
|
>>> ISURL("http://collectivite.isla.corsica")
|
||||||
|
True
|
||||||
>>> ISURL("http://../")
|
>>> ISURL("http://../")
|
||||||
False
|
False
|
||||||
>>> ISURL("http://??/")
|
>>> ISURL("http://??/")
|
||||||
|
@ -247,6 +247,7 @@ describe('gutil', function() {
|
|||||||
assert.isTrue(gutil.isEmail('email@subdomain.do-main.com'));
|
assert.isTrue(gutil.isEmail('email@subdomain.do-main.com'));
|
||||||
assert.isTrue(gutil.isEmail('firstname+lastname@domain.com'));
|
assert.isTrue(gutil.isEmail('firstname+lastname@domain.com'));
|
||||||
assert.isTrue(gutil.isEmail('email@domain.co.jp'));
|
assert.isTrue(gutil.isEmail('email@domain.co.jp'));
|
||||||
|
assert.isTrue(gutil.isEmail('marie@isola.corsica'));
|
||||||
|
|
||||||
assert.isFalse(gutil.isEmail('plainaddress'));
|
assert.isFalse(gutil.isEmail('plainaddress'));
|
||||||
assert.isFalse(gutil.isEmail('@domain.com'));
|
assert.isFalse(gutil.isEmail('@domain.com'));
|
||||||
|
Loading…
Reference in New Issue
Block a user