今天在做作业时差点秃头,不过也发现了正则表达式的一个问题
先贴出作业
还有一开始我的代码
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
</head>
<body>
<form name="form_1">
<table border="1" cellpadding="2" cellspacing="0" align="center">
<caption align="center">新用户注册</caption>
<tr >
<td>用户名:</td>
<td><input type="text" name="" id="userName" value="" /></td>
<td>* 不能为空,可包括中文、字母、下划线、数字和减号,总长度为4-8之间</td>
</tr>
<tr>
<td>密 码:</td>
<td><input type="password" name="" id="passWord" value="" /></td>
<td>* 只能是字母、数字组合,长度8-12</td>
</tr>
<tr>
<td>年龄:</td>
<td><input type="text" name="" id="Age" value="" /></td>
<td>* 只能是整数</td>
</tr>
<tr>
<td>联系电话:</td>
<td><input type="text" name="" id="telNum" value="" /></td>
<td>* 允许手机号码与固定电话</td>
</tr>
<tr>
<td>身份证号:</td>
<td><input type="text" name="" id="idNum" value="" /></td>
<td>* 15位或18位</td>
</tr>
<tr>
<td>Email:</td>
<td><input type="text" name="" id="Email" value="" /></td>
<td>* 符合email格式</td>
</tr>
<tr align="center">
<td colspan="3">
<input type="submit" name="" id="" onclick="Registered()"/>
<input type="reset" name="" id="" />
</td>
</tr>
</table>
</form>
<script type="text/javascript">
function Registered() {
var username = document.getElementById("userName").value;
var password = document.getElementById("passWord").value;
var age = document.getElementById("Age").value;
var telnum = document.getElementById("telNum").value;
var idnum = document.getElementById("idNum").value;
var email = document.getElementById("Email").value;
var cnt = 0;
if ((/^[\u4E00-\u9FA5a-zA-Z0-9_-]{4,8}$/).test(username)) {
cnt += 1;
}
else{
alert("用户名错误");
}
if ((/^[0-9a-zA-Z]{8,12}$/).test(password)) {
cnt += 1;
}
else{
alert("密码错误");
}
if ((/^[0-9]+$/).test(age)) {
cnt += 1;
}
else{
alert("年龄错误");
}
if ((/^((0\d{2,3}-\d{7,8}) | (1[345678]\d{9}))$/).test(telnum)){
cnt += 1;
}
else{
alert("联系电话错误");
}
if ((/^([1-9]{1})([0-9]{16})([Xx0-9]{1})$/).test(idnum)) {
cnt += 1;
}
else{
alert("身份证错误");
}
if ((/^[a-zA-Z0-9_-]+@([a-zA-Z0-9]+\.)+(com|cn|net|org)$/).test(email)) {
cnt += 1;
}
else{
alert("邮箱错误");
}
console.log(cnt)
if (cnt == 6){
alert("注册成功!");
}
else{
alert("注册失败!");
}
}
</script>
</body>
</html>
修改了一些错误后,一直在联系电话那里出问题。经过一系列验证,确定是正则表达式出的问题,但一直找不出。
后来才发现,是我的编程习惯给我惹的祸。
if ((/^((0\d{2,3}-\d{7,8}) | (1[345678]\d{9}))$/).test(telnum)){
cnt += 1;
}
else{
alert("联系电话错误");
}
出错的原因就在于 "|" 旁边的两个空格。。。。
着实没想到啊!!!
现在想想,以后在正则表达式里不要出现多余的符号为好,不然就可能想我一样,想到秃头!