1. 程式人生 > >前端系列教程之JS(常規驗證規則)

前端系列教程之JS(常規驗證規則)

<!DOCTYPE HTML>
<head>
	<title>常見的驗證規則</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
	<h2>常見的驗證規則</h2>
	<p><input type="text" value='姓名驗證' data-reg='Chinese' data-smsg='通過√' data-emsg='請輸入中文' id='regUser' data-tmsg='msgU' /><span
		 id='msgU'></span></p>
	<p><input type="text" value='郵箱驗證' data-reg='email' data-smsg='通過√' data-emsg='請輸入郵箱' id='regEmail' data-tmsg='msgE' /><span
		 id='msgE'></span></p>
	<p><input type="text" value='電話驗證' data-reg='phone' data-smsg='通過√' data-emsg='請輸入電話' id='regPhone' data-tmsg='msgP' /><span
		 id='msgP'></span></p>
	<p><input type="text" value='帶小數位的數字驗證' data-reg='decimalNumber' data-smsg='通過√' data-emsg='請輸入小數數字' id='regNumber'
		 data-tmsg='msgN' /><span id='msgN'></span></p>
	<script type="text/javascript">
		window.onload = function() {
			var getRegular = function(rstr) {
					var regData = {}; //正則資料儲存域
					regData.rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g; // 去除空格的正則
					regData.Chinese = /[\u4e00-\u9fa5]/g; //中文
					regData.nonumber = /\D/g; //數字
					regData.nochinese = /[^\u4e00-\u9fa5]/g; //非中文
					regData.email =
						/^\s*[a-zA-Z0-9]+(([\._\-]?)[a-zA-Z0-9]+)*@[a-zA-Z0-9]+([_\-][a-zA-Z0-9]+)*(\.[a-zA-Z0-9]+([_\-][a-zA-Z0-9]+)*)+\s*$/; //郵件
					regData.phone = /^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,})){0,}$/; //電話
					regData.decimalNumber = /^\d+(\.\d+)+$/; //帶小數位的數字
					regData.htmlTags = /<[\/\!]*[^<>]*>/ig; //html

					return regData[rstr];

				},
				forElementArr = function(_elementArr, callBack) {
					var arr = _elementArr,
						self = this;

					if (!(_elementArr instanceof Array)) {
						arr = [_elementArr];
					};
					for (var i = 0, arrLen = arr.length; i < arrLen; i++) {
						var arrI = arr[i];
						if (typeof arrI == "string") {
							arrI = self.getElement(arrI);
						}
						callBack && callBack(i, arrI);
					}
				},
				verification = function(str, reg) {
					return getRegular(reg).test(str);
				},
				setCss = function(_this, cssOption) {
					if (!_this || _this.nodeType === 3 || _this.nodeType === 8 || !_this.style) {
						return;
					}
					for (var cs in cssOption) {
						_this.style[cs] = cssOption[cs];
					}
					return _this;
				};

			forElementArr([
				document.getElementById("regUser"),
				document.getElementById("regEmail"),
				document.getElementById("regPhone"),
				document.getElementById("regNumber")
			], function(index, _this) {

				_this.onkeyup = function() {
					var _v = this.value.replace(/^(\s|\u00A0)+|(\s|\u00A0)+$/g, ""), //獲取被處理的元素值
						_reg = this.getAttribute("data-reg"), //獲取正則
						__reg = _reg.indexOf(",") > 0 ? _reg.split(",") : [_reg], //如果含有“,”則將其轉換成多陣列
						_regLen = __reg.length, //陣列長度
						_emsg = this.getAttribute("data-emsg"), //錯誤資訊顯示
						_smsg = this.getAttribute("data-smsg"), //通過資訊顯示
						_target = document.getElementById(this.getAttribute("data-tmsg")), //獲取顯示資訊的元素
						i = 0;
					for (; i < _regLen; i++) {
						if (!verification(_v, __reg[i])) {
							_target.innerHTML = _emsg;
							setCss(_target, {
								"color": "red"
							})
							return;
						}
					}
					_target.innerHTML = _smsg;
					setCss(_target, {
						"color": "green"
					})
				}
			});
		};
	</script>
</body>
</html>