js 正则表达式 结果为true的解答
提问:在JS的正则表达式里遇到这个问题
\d{3} 是表示有3个数字, 那下面的例子中1000就有4个数字,就不满足\d{3}的情况, 按道理应该返回是false,但为什么alert(pattern.test(aa))返回的还是true呢,而且我发现怎么改1000,始终都是显示true,同样后面的0000也是怎么改都是ture,倒是中间的01添加或减少数字会显示false,
所有向各位大佬咨询一下是正则表达式哪里出来问题?正则表达式的完整代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>js 正则表达式 xinbiancheng.cn</title>
</head>
<body>
<p>正则表达式 为什么结果一直为true的解答</p>
</body>
<script>
var aa = '1000-01-0000';
var pattern = /\d{3}-\d{2}-\d{4}/;
alert(pattern.test(aa));
</script>
</html>
分析如下:
1 | 0 | 0 | 0 | - | 0 | 1 | - | 0 | 0 | 0 | 0 | |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
表格第一行代表js的字符串,第二行代表字符串的索引
当我们从索引 1 的位置开始匹配时就是 000-01-0000,就满足正则表达式 /\d{3}-\d{2}-\d{4}/ 前3位是数字-中间2位数字-后面4位数字,所以始终是满足条件的。
如果我们指定从索引 0 的位置开始匹配时就是 1000-01-0000 就不满足正则表达式 /\d{3}-\d{2}-\d{4}/ 因为第一组1000 是4个数字,而我们的正则第一组 \d{3}是在3个数字。所以不匹配,返回为false。
如何指定从索引 0 的位置开始匹配呢?那就用了解正则表达式的元字符^, ^代表匹配输入字符串的开始位置,也就是索引 0 的位置
js正则表达式代码修改为:
<script>
var aa = '1000-01-0000';
var pattern = /^\d{3}-\d{2}-\d{4}/;
alert(pattern.test(aa));
</script>