у меня проблема с проверкой почты в javascript - PullRequest
0 голосов
/ 01 октября 2009

У меня проблема с проверкой почты на JavaScript, Я написал код что-то вроде,

// emp.php

    <form action="<?php echo $editFormAction; ?>" method="post" name="form2" id="form2" >
<table>
<tr valign="baseline">
      <td nowrap="nowrap" align="right">Desired Email-ID:</td>
      <td><input type="text" name="emp_email" value="" size="32" onsubmit="checkMail()";/></td>
    </tr>
<tr valign="baseline">
      <td nowrap="nowrap" align="right">&nbsp;</td>
      <td><input type="submit" value="Insert record" onclick="checkMail();"/></td>
    </tr>
  </table>
</form>

// код java scrit для checkMail ()

<script language="javascript">

function checkMail() {
  var email=document.getElementById('emp_email').value;
var mail = email.value;

        var reg = new RegExp('^[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*@[a-z0-9]+([_|\.|-]­{1}[a-z0-9]+)*[\.]{1}(com|ca|net|org|fr|us|qc.ca|gouv.qc.ca)$', 'i');



        if(!reg.test(mail) || mail == "")

        {

          alert("Your email address isn't valid!");

          return false;

        }

        else {

            alert("Email address is okay, let's send the form!");    

        }

      }

      </script>

Плз, помогите мне заранее спасибо

Ответы [ 3 ]

5 голосов
/ 01 октября 2009

Проблема в том, что нет элемента с идентификатором

emp_email.

Ваш элемент имеет имя emp_email. Добавьте атрибут id в текстовое поле.

<input type="text" name="emp_email" value="" size="32" onsubmit="checkMail()";/>

изменить на

<input type="text" name="emp_email" id="emp_email" value="" size="32" onsubmit="checkMail()";/>

Edit: Чтобы поставить проверку JavaScript на изменение кнопки отправки

<input type="submit" value="Insert record" onclick="checkMail();"/>

до

<input type="submit" value="Insert record" onClick="return checkMail();" />

и удалите событие onsubmit из текстового поля электронной почты.

1 голос
/ 01 октября 2009

Феникс имеет право основной ошибки. Но:

<td><input type="submit" value="Insert record" onclick="checkMail();"/></td>

Не помещайте проверку формы на отправку. Возможно отправить форму без нажатия кнопки «Отправить» (в зависимости от браузера и количества полей и кнопок в форме). Всегда помещайте это в саму форму:

<form ... onsubmit="return checkMail();">

также:

var reg = new RegExp('^[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*@[a-z0-9]+([_|\.|-]­{1}[a-z0-9]+)*[\.]{1}(com|ca|net|org|fr|us|qc.ca|gouv.qc.ca)$', 'i');

Это действительно плохая идея, как и большинство специальных «проверок электронной почты», она отклоняет многие полностью действительные адреса электронной почты. Ваши правила относительно того, какие имена пользователей и TLD разрешены, являются особенно бессмысленными и ограничительными.

См. это печально известное регулярное выражение , чтобы узнать, как на самом деле проверять адреса электронной почты. Тогда плачь, сдавайся и просто делай базовые проверки вместо этого. (Есть ли в нем "@"? Есть ли в нем "."? Пробелов нет? Тогда хорошо.)

(Даже page-long-horror-regex не может справиться с не-ASCII адресами электронной почты через IDN, что было бы неплохо поддерживать.)

0 голосов
/ 01 октября 2009

Попробуйте переместить вызов функции javascript с кнопки отправки на событие onblur в самом поле электронной почты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...