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>"
?>
现在输入错误手机号后,会正常显示弹窗,然而输入正确手机号后,发现仍弹窗
用浏览器的检查元素功能查看转义后的代码
发现原来是 \\
这个东西被转义成了 \
导致正则表达式错误
于是
做出修改
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日