我有一個聯繫表。提交時使用AJAX加載「/forms/contact_received.php」給我發電子郵件&將用戶的聯繫信息添加到數據庫。類似於數據庫中10%條目(及其相關電子郵件)的東西沒有電子郵件地址。jQuery驗證電子郵件允許空白不知何故
我似乎無法複製這個問題。有一段時間我有表單寄給我的用戶代理,希望他們都有相同的瀏覽器,但它是一個橫截面,一些Safari瀏覽器,一些Mozilla,一些IE瀏覽器,一些手機,一些桌面。此外,空白的電子郵件提交也不是惡意的,這些都是來自實際人類的合法問題。
我的劇本看起來是這樣的:
<script type="text/javascript">
function checkForm() {
hideAllErrors();
var formIsValid =
showErrorAndFocusIf('FieldData0', isEmpty, 'nameError')
&& showErrorAndFocusIf('FieldData2', isEmpty, 'emailError')
&& showErrorAndFocusIf('FieldData2', isAnInvalidEmail, 'emailError2')
&& showErrorAndFocusIf('FieldData1', isEmpty, 'questionError');
return formIsValid;
}
function showErrorAndFocusIf(fieldId, predicate, errorId) {
var field = document.getElementById(fieldId);
if (predicate(field)) {
document.getElementById(errorId).style.display = 'inline';
if (field.select) {
field.select();
}
field.focus();
return false;
}
return true;
}
function isEmpty(field) {
return field.value == '';
}
function isAnInvalidEmail(field) {
var email = field.value;
var ok = "1234567890qwertyuiop[][email protected]_QWERTYUIOPASDFGHJKLZXCVBNM";
for(i = 0; i < email.length; i++){
if(ok.indexOf(email.charAt(i)) < 0) {
return true;
}
}
re = /(@.*@)|(\.\.)|(^\.)|(^@)|(@$)|(\.$)|(@\.)/;
re_two = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
return re.test(email) || !re_two.test(email);
}
function hideAllErrors() {
document.getElementById("nameError").style.display = "none"
document.getElementById("emailError").style.display = "none"
document.getElementById("emailError2").style.display = "none"
document.getElementById("questionError").style.display = "none"
}
</script>
和我的HTML看起來像這樣:
<style>
.error{display:inline;margin:0;}
</style>
<form id="contact" name="contact" action="">
<b>Name</b>
<input class="valid" name="name" value="" maxlength="100" size="30" style="display:block;" type="text">
<b>Email</b> (will not be published)
<input class="error" name="email" value="" maxlength="100" size="30" style="display:block;" type="email">
<label class="error" generated="true" for="email">Please enter a valid email address</label>
<b>Question</b>
<textarea class="error" name="message" cols="50" rows="5" style="display:block;"></textarea>
<label class="error" generated="true" for="message">Please enter your message in the box above</label>
<input name="page" value="[URL]" type="hidden">
<input class="btn" value="Contact Us" name="Submit" type="submit">
</form>
什麼可能是我的驗證可能失敗的一些可能的情況呢?就像我說的,驗證對我來說很好,我無法弄清楚它將如何被繞過。
javascript在瀏覽器中禁用?!無論如何,驗證也應該在服務器端完成 – 2014-11-14 21:43:46
我們假設很多 - 驗證方法曾經被調用過(未顯示),如果是的話,何時;您的電子郵件字段要麼添加了一個匹配「FieldData2」的id,要麼這是虛擬的HTML,它仍然*真*接近實時HTML;驗證處理程序的結果不會被忽略;等 – 2014-11-14 21:47:12