php中利用js html进行手机号验证

时间:2024-03-29 10:02:10

php中利用js html进行手机号验证

网上搜索到了js 中手机号的正则表达式验证法

js代码

<script>
function validateForm(){
	var reg = new RegExp("^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$");
	var phoneVar = reg.test(document.forms["myForm"]["mobile"].value);
	if (!phoneVar){
		alert("请输入正确的手机号码");
		return false;
	}
</script>

html代码

<form action="UpdateChuLi.php" method="POST" name="myForm" onsubmit="return validateForm()">
	<input required type="text"  name="mobile" maxlength="11" onkeyup="(this.v=function(){this.value=this.value.replace(/[^0-9-]+/,'');}).call(this)" onblur="this.v();"/>
	<button type="submit" class="btn btn-primary">提交修改</button>
</form>
正常在html页面里是可以正常使用的,一旦填写错误,表单会弹出一个警告要求

请输入正确的手机号码

但是放在php页面就无法使用了,必须对其中的符号进行转义

转义字符代码 转义字符的含义
\ " 双引号
\ ’ 单引号
\ \ 反斜杠
\ n 换行符
\ r 回车符
\ t 制表符
\ $ 美元符号

于是乎,新的代码经过转义变成了

<?php
echo "
<html>
<head>
	<script>
	function validateForm(){
		var reg = new RegExp(\"^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$\");
		var phoneVar = reg.test(document.forms[\"myForm\"][\"mobile\"].value);
		if (!phoneVar){
			alert(\"请输入正确的手机号码\");
			return false;
		}
	</script>
</head>
<body>
<form action=\"UpdateChuLi.php\" method=\"POST\" name=\"myForm\" onsubmit=\"return validateForm()\">
	<input required type=\"text\"  name=\"mobile\" maxlength=\"11\" onkeyup=\"(this.v=function(){this.value=this.value.replace(/[^0-9-]+/,'');}).call(this)\" onblur=\"this.v();\"/>
	<button type=\"submit\" class=\"btn btn-primary\">提交修改</button>
</form>
</body>
</html>"
?>

现在输入错误手机号后,会正常显示弹窗,然而输入正确手机号后,发现仍弹窗

用浏览器的检查元素功能查看转义后的代码

php中利用js html进行手机号验证

发现原来是 \\ 这个东西被转义成了 \ 导致正则表达式错误
于是
做出修改

var reg = new RegExp(\"^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\\d{8}$\");

将双\\改成三\\\,之后转义就会变成正常js的双\\

然后就正常了

这种小问题以后也要注意哇

2018年10月4日