Нет, это регулярное выражение не подходит для этой цели. Взгляните на это (хотя я не могу гарантировать, что оно действительно).
Кроме того, что касается самого скрипта, почему вы не проверяете так:
function checkEmailValidity(e) {
return e.match("some validating regex");
}
Это выглядит как более быстрое, более продуманное и удобочитаемое решение.
EDIT:
Стоит отметить, что практически невозможно написать регулярное выражение, которое может обнаружить любой действительный адрес электронной почты. Поэтому вам может быть лучше попытаться создать какой-то алгоритм проверки вместо регулярного выражения, поскольку действительные адреса электронной почты могут быть очень и очень сложными.
Рассмотрим этот код:
function validateEmail(email) {
if (typeof email != "string") return false;
email = email.split("@");
email[1] = email[1].split(".");
if (
email.length !== 2 ||
email[1].length < 2 ||
!email[1].hasValues(String)
) return false;
return true;
}
// Checks whether each key in an array has a value, and (optionally) if they match a given contructor (object type).
// I.e.: myArray.hasValues(String) // checks whether all elements in myArray has a value, a nonempty string.
Array.prototype.hasValues = function(assumedConstructor) {
for (var i = 0; i < this.length; i++) {
if (!this[i]) return false;
if (assumedConstructor && this[i].constructor != assumedConstructor) return false;
}
return true;
};
Работает так:
- Сначала проверяется, содержит ли строка один
@
и только один
- Проверяет, что деталь после
@
имеет хотя бы один .
- Проверяет, есть ли символы между каждым из возможных
.
.
По-прежнему будет легко подделать поддельный адрес электронной почты, но таким образом мы гарантируем, что он по крайней мере каким-то образом будет правильно отформатирован. Единственное, что я могу придумать, это внутренние комментарии @
, которые должны быть абсолютно законными в соответствии с RFC, но этот код будет воспринимать это как ошибку.
Обычные пользователи интернета, у которых нормальные адреса электронной почты, не подведут. Так что, насколько это действительно важно, решать вам;)
Лучшее решение, если оно доступно, - это ввести адрес в какой-нибудь встроенный метод, который каким-то образом проверяет правильность, пытаясь использовать адрес электронной почты.