Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не работает проверка валидности емайла (https://javascript.ru/forum/misc/29675-ne-rabotaet-proverka-validnosti-emajjla.html)

sitebuilder 06.07.2012 19:46

Не работает проверка валидности емайла
 
function proverka_email(input) 
{
var value = input.value; 
var rep = /([a-z0-9_\-]+\.)*[a-z0-9_\-]+@([a-z0-9][a-z0-9\-]*[a-z0-9]\.)+[a-z]{2,4}$/g; 

if (rep.test(value)) 
{ value = value.replace(rep, ''); input.value = value; } 
}


Где то здесь ошибка в регулярке, но где не могу понять.

Deff 06.07.2012 19:51

Цитата:

Сообщение от sitebuilder
Не работает проверка валидности емайла

:) А опишите - в чём соль проверки ? мож можно и без регулярки или более короткой

sitebuilder 06.07.2012 19:57

Цель: при вводе емайла в текстовом поле чтобы сразу проверялось на валидность то что вводится и отсекались бы невалидные символы.

С полем логина или пароля у меня все без проблем работает, там регулярка простая. А вот тут затык.

Deff 06.07.2012 20:02

sitebuilder,
Приведите шесть примеров три Валидных - Три невалидных (в столбик

sitebuilder 06.07.2012 20:16

Мне кажется, либо я неточно выразился в первом посте, либо Вы меня не так поняли.

Вот пример того что работает. Отсечение невалидных символов в поле логина:

function proverka_login(input) 
{ 
var value = input.value; 
var rep = /[^a-zA-Z0-9]/g; 
if (rep.test(value)) {value = value.replace(rep, ''); input.value = value;}
} 

<input name="login" type="text" onkeyup="return proverka_login(this);">


Теперь хочу сделать то же но с полем Email. Вот что у меня получилось:

function proverka_email(input) 
{ 
var value = input.value; 
var rep = /[^a-zA-Z0-9@._\-]/g; 
if (rep.test(value)) {value = value.replace(rep, ''); input.value = value;}
} 

<input name="email" type="text" onkeyup="return proverka_email(this);">


Но это не правильный подход. Ибо теперь можно вводить такие email как:
@@asdasd....
asdasd....@
asdasd@@asdasd.ru
asdasd@asdasd...ru
asdasdas@asdasd@.rrrrrrr
и др.

Deff 06.07.2012 20:44

<input id="MyInp" type=text ><input type=button onclick="tstInp()">

<script type="text/javascript">
function tstInp() {
 var val = document.getElementById("MyInp").value;
 var tst=val.search(/^[a-z0-9_]+?@[a-z0-9_]+\.[a-z]{2,4}$/g)
 if(tst==0){alert("Верно");return true;}
 alert("Неверно");return false;
}
</script>


есть еще и нижняя черта http://www.sitc.ru/mail/email.shtml

sitebuilder 06.07.2012 20:58

Полезный пример. Но у меня задача найти правильную регулярку для моего случая. У меня есть готовая функция (см выше), надо лишь правильно запихнуть туда регулярку. Пробовал взять регулярку из Вашего последнего примера - не получилось.

Моя функция позволяет на лету удалять из текстового поля символы которые не являются валидными. Не могу лишь регулярку правильную для емайла подобрать.

oneguy 06.07.2012 21:32

Если вы делаете скрипт для проверки емейлов на публичном сайте, то он может принимать некоторые неправильные емейл адреса, но обязан принимать все валидные адреса. Точная регулярка, которая принимает все правильные адреса и отсеивает неправильные, довольно сложна. Поэтому, по моему мнению, лучше только проверять в адресе емейл наличие символа "@".
В Википедии есть статья по этой теме, где написано, что даже такой адрес:
Код:

"()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~  ? ^_`{}|~.a"@example.org
является валидным.


Часовой пояс GMT +3, время: 13:31.