diff options
author | Robert Pluim <rpluim@gmail.com> | 2023-02-15 12:16:11 +0100 |
---|---|---|
committer | Robert Pluim <rpluim@gmail.com> | 2023-03-10 11:22:54 +0100 |
commit | 03cfede8f0aa952bde76fa595ca06770cc52e655 (patch) | |
tree | 00b4d4bd2b27efe93cb49a65e8ace0fff2a262f0 | |
parent | 8ee205d232574e12921b052c7e93b7e16d6f1187 (diff) | |
download | emacs-03cfede8f0aa952bde76fa595ca06770cc52e655.tar.gz |
Improve thing-at-point email detection
* lisp/thingatpt.el (thing-at-point-email-regexp): Allow numbers at
the start of the user portion, and disallow '.' at the start. Also
disallow '.' at the start of the domain portion.
* test/lisp/thingatpt-tests.el (thing-at-point-test-data): Add various
email tests.
Bug#61519
-rw-r--r-- | lisp/thingatpt.el | 2 | ||||
-rw-r--r-- | test/lisp/thingatpt-tests.el | 33 |
2 files changed, 33 insertions, 2 deletions
diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el index 9363a474cb5..f3367290dee 100644 --- a/lisp/thingatpt.el +++ b/lisp/thingatpt.el @@ -645,7 +645,7 @@ back from point." ;; Email addresses (defvar thing-at-point-email-regexp - "<?[-+_.~a-zA-Z][-+_.~:a-zA-Z0-9]*@[-.a-zA-Z0-9]+>?" + "<?[-+_~a-zA-Z0-9][-+_.~:a-zA-Z0-9]*@[-a-zA-Z0-9]+[-.a-zA-Z0-9]*>?" "A regular expression probably matching an email address. This does not match the real name portion, only the address, optionally with angle brackets.") diff --git a/test/lisp/thingatpt-tests.el b/test/lisp/thingatpt-tests.el index 0daf27f32ec..7cf41d2817b 100644 --- a/test/lisp/thingatpt-tests.el +++ b/test/lisp/thingatpt-tests.el @@ -72,7 +72,38 @@ ("<url:ftp.example.net/abc/>" 1 url "ftp://ftp.example.net/abc/") ;; UUID, only hex is allowed ("01234567-89ab-cdef-ABCD-EF0123456789" 1 uuid "01234567-89ab-cdef-ABCD-EF0123456789") - ("01234567-89ab-cdef-ABCD-EF012345678G" 1 uuid nil)) + ("01234567-89ab-cdef-ABCD-EF012345678G" 1 uuid nil) + ;; email addresses + ("foo@example.com" 1 email "foo@example.com") + ("f@example.com" 1 email "f@example.com") + ("foo@example.com" 4 email "foo@example.com") + ("foo@example.com" 5 email "foo@example.com") + ("foo@example.com" 15 email "foo@example.com") + ("foo@example.com" 16 email "foo@example.com") + ("<foo@example.com>" 1 email "<foo@example.com>") + ("<foo@example.com>" 4 email "<foo@example.com>") + ("<foo@example.com>" 5 email "<foo@example.com>") + ("<foo@example.com>" 16 email "<foo@example.com>") + ("<foo@example.com>" 17 email "<foo@example.com>") + ;; email adresses containing numbers + ("foo1@example.com" 1 email "foo1@example.com") + ("1foo@example.com" 1 email "1foo@example.com") + ("11@example.com" 1 email "11@example.com") + ("1@example.com" 1 email "1@example.com") + ;; email adresses user portion containing dots + ("foo.bar@example.com" 1 email "foo.bar@example.com") + (".foobar@example.com" 1 email nil) + (".foobar@example.com" 2 email "foobar@example.com") + ;; email adresses domain portion containing dots and dashes + ("foobar@.example.com" 1 email nil) + ("foobar@-example.com" 1 email "foobar@-example.com") + ;; These are illegal, but thingatpt doesn't yet handle them + ;; ("foo..bar@example.com" 1 email nil) + ;; ("foobar@.example.com" 1 email nil) + ;; ("foobar@example..com" 1 email nil) + ;; ("foobar.@example.com" 1 email nil) + + ) "List of `thing-at-point' tests. Each list element should have the form |