<script language="javascript">
function ck(v){
//判断用户输入的内容必须是3个数字或者是5个数字的正则表达式是怎么样的
var d=v.value;
var r1=/^\d{3}|\d{5}$/;    //为什么这个不可以
var r2=/^\d{3}$|^\d{5}$/; //正确答案。
alert(r2.test(d))
}
</script>
</head>
<body>
<input type="text" id="d" onblur="ck(this)" />
</body>
</html>

解决方案 »

  1.   

    var r1=/^\d{3}|\d{5}$/; 这样写等价于var r1=(?:/^\d{3})|(?:\d{5}$)/; 也就是说这个正则只是判断输入内容前3位或后5位为数字,想要达到你的效果,var reg = /^(?:\d{3}|\d{5})$/;即可
      

  2.   

    var r1=/^\d{3}|\d{5}$/; 这样写等价于var r1 = /(?:^\d{3})|(?:\d{5}$)/; 也就是说这个正则只是判断输入内容前3位或后5位为数字,想要达到你的效果,var reg = /^(?:\d{3}|\d{5})$/;即可
      

  3.   

    var r1=/^\d{3}|\d{5}$/; //为什么这个不可以因为  你这句的意思是   以 3位数字开头  或者以 5位数字结尾  中间可以再插别的,所以不明确如果要改的话就是  var r1=/^\d{3}$|^\d{5}$/; 
      

  4.   

    ++
    Try:var reg=/^(?:\d{3}|\d{5})$/;
      

  5.   

    var r1=/^\d{3}|\d{5}$/等价于var r1=/(^\d{3})|(\d{5}$)/;
    它不等价于var r1=/^(\d{3}|\d{5})$/;
    也就是可以写成var r1=/^(\d{3}|\d{5})$/;
    也是就是优先级问题,跟我刚学正则时一样,一开始跟楼主想的一样,但看了正则表达式权威指南才知道
      

  6.   

    var r1=/^(\d{3}|\d{5})$/; 这样就可以了吧
      

  7.   


    /^\d{3}(\d\d)?$/
    /^\d(\d\d){1,2}$/从回溯的角度来说,重叠子串是个忌讳。