Проверка данных формы в строгом Javascript xhtml 1.0, без учета серверных сценариев для этого экземпляра

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

редактировать

Я полностью понимаю, что на живом веб-сайте проверка на стороне сервера жизненно важна. Я также понимаю ценность отправки подтверждения по электронной почте. (У меня на самом деле есть сайт, который имеет все эти функции). Я знаю, как кодировать проверки на спам в php.

В этом случае меня попросили проверить поле ввода электронной почты. Я должен соответствовать строгому стандарту xhtml 1.0, поэтому не могу использовать тип "электронная почта", и мне не разрешено использовать серверные сценарии для этого назначения. Я не могу организовать подтверждение по электронной почте, оно должно быть полностью проверено через JavaScript.

Я надеюсь, что это проясняет мой вопрос

Я пытаюсь проверить форму для двух вещей.

Чтобы проверить, что все поля имеют данные. Чтобы увидеть, если введен правильный адрес электронной почты.

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

Раньше он давал оповещения, но неправильно, теперь его вообще не вызывают (или, по крайней мере, так он себя ведет).

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

Я сосредоточен только на проверке этого в javascript, Я не беспокоюсь о стороне сервера в данном конкретном случае (другая проблема вне этого вопроса). Благодарю.

function Validate()
        {
            var inputs = [document.getElementById('fname'),_
 document.getElementById('lname'), document.getElementById('email1'),_
 document.getElementById('email2')];

            for(var i = 0; i<inputs.length; i++)
            {
                if(inputs[i].value == '')
                {
                   alert('Please complete all required fields.');
                    return false;
                    }

                    else if ((id =='email1' || 'email2') &&_
(inputs[i].value!= /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/ )){
                        alert('Please enter a valid email address.');
                        return false;
                    }
            }
         }


<form onsubmit="return Validate()"  action="" method="post"  id="contactForm" >
 <input  type="text"  name="fname" id="fname"  />

 <input  type="text"  name="lname" id="lname" />

 <input   type="text"  name="email1"  id="email1" />

 <input   type="text"  name="email2"  id="email2"/>

 <input type="submit" value="submit" name="submit"  />
</form>

Дополнительное примечание - для форматирования текста, который переносится, это нормально (в целях размещения вопроса, добавления и подчеркивания и создания новой строки для удобства чтения? В реальном тексте у меня нет этого! Пожалуйста, сообщите, если Есть более простой способ отформатировать мой код для постов. Еще раз спасибо.

Редактировать 2

Это работает, когда я закомментирую это:

/*else if ((id =='email1' || id=='email2') && (inputs[i].value!= /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/ )){
    alert('Please enter a valid email address.');
        return false;
}*/

Так что это помогает при устранении неисправностей.

4 ответа

Решение

Я уже вижу синтаксическую ошибку там:

else if ((id =='email1' || 'email2') 

должно быть

else if ((id =='email1' || id=='email2') 

откуда я это вижу.

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

наконец, что касается проверки электронной почты, это не то, как вы используете регулярное выражение. Пожалуйста, прочитайте этот пост для демонстрации того, как проверить электронную почту в javascript + regex.

Лучшее, что можно сделать с проверкой адреса электронной почты - это отправить письмо на этот адрес. Regex просто не работает для проверки адресов электронной почты. Вы можете проверить обычные адреса, такие как john.doe@email.com, но есть другие действительные адреса электронной почты, которые вы отклоните, если будете использовать regex

Проверить Regexp распознавание адреса электронной почты трудно? AND: использование регулярного выражения для проверки адреса электронной почты

 var a=document.getElementById('fname');
 var b=document.getElementById('lname');
 var c=document.getElementById('email1');
 var d=document.getElementById('email12')

if(a==""||b==""||c==""||d=="")
 {
 alert('Please complete all required fields.');
 return false;
 }

Я разработал решение моей проблемы следующим образом. У меня также есть здесь, чтобы проверить, совпадают ли электронные письма.

// JavaScript Document
//contact form function

 function ValidateInputs(){
 /*check that fields have data*/

 // create array containing textbox elements
 var inputs = [document.getElementById("fname"),_
document.getElementById("lname"), document.getElementById("message"),_
document.getElementById("email1"), document.getElementById("email2")];

    for(var i = 0; i<inputs.length; i++){
 // loop through each element to see if value is empty
        if(inputs[i].value == ""){

            alert("Please complete all fields.");
            return false;
        }
        else if ((email1.value!="") && (ValidateEmail(email1)==false)){

            return false;
        }
        else if ((email2.value!="") && (EmailCheck(email2)==false)){

            return false;
        }
    }
}   


function ValidateEmail(email1){
/*check for valid email format*/
    var reg =/^.+@.+$/;

    if (reg.test(email1.value)==false){

        alert("Please enter a valid email address.");
        return false;

    }
}

function EmailCheck(email2){

    var email1 = document.getElementById("email1");
    var email2 = document.getElementById("email2");

    if ((email2.value)!=(email1.value)){

        alert("Emails addresses do not match.");
        return false;
    }
}

<form onsubmit="return ValidateInputs();" method="post"  id="contactForm">

    <input  type="text"  name="fname" id="fname"  />
    <input  type="text"  name="lname" id="lname" />
    <input   type="text" onblur="return ValidateEmail(this);"  name="email1"  id="email1" />
    <input   type="text" onblur="return EmailCheck(this);" name="email2"  id="email2"/>
    <input type="submit" value="submit" name="submit"  />
</form>
Другие вопросы по тегам