效果
function validateRequiredFields(formId) {
var form = document.getElementById(formId);
var elements = form.elements;
var valid = true;
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
if (element.hasAttribute("req")) {
var value = element.value.trim();
if (value === "") {
valid = false;
showError(element, "必填项不能为空");
} else {
hideError(element, "必填项不能为空");
}
if (element.hasAttribute("min")) {
var minLength = parseInt(element.getAttribute("min"));
if (value.length < minLength) {
valid = false;
showError(element, "必须至少输入" + minLength + "个字符");
} else {
hideError(element, "必须至少输入" + minLength + "个字符");
}
}
if (element.hasAttribute("max")) {
var maxLength = parseInt(element.getAttribute("max"));
if (value.length > maxLength) {
valid = false;
showError(element, "最多只能输入" + maxLength + "个字符");
element.value = value.substr(0, maxLength);
} else {
hideError(element, "最多只能输入" + maxLength + "个字符");
}
}
if (element.hasAttribute("type")) {
var type = element.getAttribute("type");
switch (type) {
case "idcard":
if (!validateIdCard(value)) {
valid = false;
showError(element, "身份证号码格式不正确");
} else {
hideError(element, "身份证号码格式不正确");
}
break;
case "phone":
if (!validatePhone(value)) {
valid = false;
showError(element, "手机号码格式不正确");
} else {
hideError(element, "手机号码格式不正确");
}
break;
case "email":
if (!validateEmail(value)) {
valid = false;
showError(element, "邮箱格式不正确");
} else {
hideError(element, "邮箱格式不正确");
}
break;
case "number":
if (!validateNumber(value)) {
valid = false;
showError(element, "必须输入数字");
} else {
hideError(element, "必须输入数字");
}
break;
}
}
element.addEventListener("change", function() {
validateRequiredFields(formId);
});
}
}
return valid;
}
function showError(element, message) {
element.style.border = "1px solid red";
element.style.backgroundColor = "#FEE";
var errorSpan = element.nextSibling;
if (!errorSpan || errorSpan.className !== "error") {
errorSpan = document.createElement("span");
errorSpan.className = "error";
errorSpan.style.color = "red";
errorSpan.style.fontSize = "12px";
element.parentNode.insertBefore(errorSpan, element.nextSibling);
}
errorSpan.innerHTML = message;
}
function hideError(element, message) {
element.style.border = "";
element.style.backgroundColor = "";
var errorSpan = element.nextSibling;
if (errorSpan && errorSpan.className === "error" && errorSpan.innerHTML === message) {
errorSpan.parentNode.removeChild(errorSpan);
}
}
function validateIdCard(idCard) {
var pattern = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
return pattern.test(idCard);
}
function validatePhone(phone) {
var pattern = /^1[3456789]\d{9}$/;
return pattern.test(phone);
}
function validateEmail(email) {
var pattern = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
return pattern.test(email);
}
function validateNumber(number) {
var pattern = /^\d+$/;
return pattern.test(number);
}