2010-06-21 2 views
1

Это сценарий, который я использую для проверки формы:Как проверить поле электронной почты в javascript?

<script language="JavaScript"> 

function formCheck(formobj){ 
    var fieldRequired = Array("Name", "Email", "Phone", "comments"); 
    var fieldDescription = Array("Name", "Email", "Phone", "Comments"); 
    var alertMsg = "Please complete the following fields:\n"; 

    var l_Msg = alertMsg.length; 

    for (var i = 0; i < fieldRequired.length; i++){ 
     var obj = formobj.elements[fieldRequired[i]]; 
     if (obj){ 
      switch(obj.type){ 
      case "select-one": 
       if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == ""){ 
        alertMsg += " - " + fieldDescription[i] + "\n"; 
       } 
       break; 
      case "select-multiple": 
       if (obj.selectedIndex == -1){ 
        alertMsg += " - " + fieldDescription[i] + "\n"; 
       } 
       break; 
      case "text": 
      case "textarea": 
       if (obj.value == "" || obj.value == null){ 
        alertMsg += " - " + fieldDescription[i] + "\n"; 
       } 
       break; 
      default: 
      } 
      if (obj.type == undefined){ 
       var blnchecked = false; 
       for (var j = 0; j < obj.length; j++){ 
        if (obj[j].checked){ 
         blnchecked = true; 
        } 
       } 
       if (!blnchecked){ 
        alertMsg += " - " + fieldDescription[i] + "\n"; 
       } 
      } 
     } 
    } 

    if (alertMsg.length == l_Msg){ 
     return true; 
    }else{ 
     alert(alertMsg); 
     return false; 
    } 
} 
// --> 
</script> 


<form onsubmit="return formCheck(this);" action="/capture.weblead" method="post"> 
First Name: <input type=text name="FirstName" size="25"><br> 
Last Name: <input type=text name="LastName" size="25"><br> 
<input type=submit value="Submit Form"> 
</form> 

Он отлично работает за исключением того, не проверяет на реальный адрес электронной почты. Как изменить эту форму так, чтобы она выполнялась?

Сценарий не может содержать никаких символов доллара, иначе Tomcat (моя серверная среда) выйдет из строя.

+10

Вы должны исправить свой сервер. – SLaks

+1

дубликат: http://stackoverflow.com/questions/46155/validate-email-address-in-javascript http://stackoverflow.com/questions/2783672/email-validation-javascript http://stackoverflow.com/questions/940577/javascript-regular-expression-email-validation –

+1

Tomcat может определенно обслуживать скрипты, содержащие символы «$». Также трудно проверить * синтаксис * для адреса электронной почты и * невозможно * определить, действительно ли это. – Pointy

ответ

0

Это быстрое и грязное решение. Измените значение переменной emailRegexp в соответствии с вашими потребностями. Здесь уже есть некоторые примеры. Как отметил Уокей, обычно лучше иметь ложные срабатывания, чем ложные негативы.

function formCheck(formobj){ 
    var fieldRequired = Array("Name", "Email", "Phone", "comments"); 
    var fieldDescription = Array("Name", "Email", "Phone", "Comments"); 
    var alertMsg = "Please complete the following fields:\n"; 
    var emailRegexp =/@/; 

    var l_Msg = alertMsg.length; 

    for (var i = 0; i < fieldRequired.length; i++){ 
     var obj = formobj.elements[fieldRequired[i]]; 
     if (obj){ 
      switch(obj.type){ 
      case "select-one": 
       if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == ""){ 
        alertMsg += " - " + fieldDescription[i] + "\n"; 
       } 
       break; 
      case "select-multiple": 
       if (obj.selectedIndex == -1){ 
        alertMsg += " - " + fieldDescription[i] + "\n"; 
       } 
       break; 
      case "text": 
      case "textarea": 
       if (obj.value == "" || 
        obj.value == null || 
        (fieldRequired[i] == "Email" && !obj.value.match(emailRegexp))) 
       { 

        alertMsg += " - " + fieldDescription[i] + "\n"; 
       } 


       break; 
      default: 
      } 
      if (obj.type == undefined){ 
       var blnchecked = false; 
       for (var j = 0; j < obj.length; j++){ 
        if (obj[j].checked){ 
         blnchecked = true; 
        } 
       } 
       if (!blnchecked){ 
        alertMsg += " - " + fieldDescription[i] + "\n"; 
       } 
      } 
     } 
    } 

    if (alertMsg.length == l_Msg){ 
     return true; 
    }else{ 
     alert(alertMsg); 
     return false; 
    } 
} 
Смежные вопросы