none
js正则表达式的问题 RRS feed

  • 问题

  •     function CheckPassword() {
            var temp = document.getElementById('<%=Password_TextBox.ClientID %>').value;
            if (CheckStr(temp ,6,16)){
                alert('抱歉!密码字母和数字组合!');
                return false;
            }
            else {
                //alert("是");
                return true;
            }
        }
        function CheckStr(str, s, e)
        {
            var m = eval("/^[a-zA-Z0-9_\-]{" + s + "," + e + "}$/");
            return m.test(trim(str));

        }
        function trim(s)
        {
            return s.replace(/\s/g, "");
        }

    为什么检测的不准确,哪里错了?

    • 已移动 Sheng Jiang 蒋晟 2009年8月3日 19:12 客户端脚本问题 (发件人:ASP.NET 与 AJAX)
    2009年8月3日 9:41

答案

  • 你好,按照你的要求,可以这样

    function CheckPassword() {
            var temp = document.getElementById('<%=Password_TextBox.ClientID %>').value;
            if (CheckStr(temp ,6,16)){
                alert('抱歉!密码由字母和数字下划线连字符-组合,且长度6-16');
                return false;
            }
            else {
                //alert("是");
                return true;
            }
        }
        function CheckStr(str, s, e)
        {
            var isMatch=false;
            var abcRe=new RegExp("^[a-zA-Z]{" + s + "," + e + "}$","ig");
            var numRe=new RegExp("^[0-9]{" + s + "," + e + "}$","ig");
            var abcNumRe=new RegExp("^[a-zA-Z0-9_\-]{" + s + "," + e + "}$","ig");
            if(abcRe.test(trim(str)))
            {
            isMatch=true;
            }
            else if(numRe.test(trim(str)))
            {
            isMatch=true;
            }
            else if(!abcNumRe.test(trim(str)))
            {
            isMatch=true;
            }
           
            return isMatch;
        }
        function trim(s)
        {
            return s.replace(/\s/g, "");
        }
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    • 已标记为答案 lfj0912 2009年8月4日 8:44
    2009年8月4日 7:45
    版主

全部回复

  • 你好,请尝试下面的方法,还有就是你的test返回是否有匹配项 按照你的代码理解相反了

    function CheckPassword() {
            var temp = document.getElementById('<%=Password_TextBox.ClientID %>').value;
            if (CheckStr(temp ,6,16)){
                //alert("是");
                return true;
            }
            else {
                alert('抱歉!密码字母和数字组合!长度6-16');
                return false;
            }
        }
        function CheckStr(str, s, e)
        {
            var re=new RegExp("^[a-zA-Z0-9_\-]{" + s + "," + e + "}$","ig")
            return re.test(trim(str));

        }
        function trim(s)
        {
            return s.replace(/\s/g, "");
        }


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年8月4日 2:58
    版主
  • 谢谢您!
    程序意图:纯字母,纯数字,弹出信息框提示;如果字母+数字,则不用弹出信息框。
    帮忙再看一下,已经困了我好几天了。
    2009年8月4日 5:37
  • 你好,按照你的要求,可以这样

    function CheckPassword() {
            var temp = document.getElementById('<%=Password_TextBox.ClientID %>').value;
            if (CheckStr(temp ,6,16)){
                alert('抱歉!密码由字母和数字下划线连字符-组合,且长度6-16');
                return false;
            }
            else {
                //alert("是");
                return true;
            }
        }
        function CheckStr(str, s, e)
        {
            var isMatch=false;
            var abcRe=new RegExp("^[a-zA-Z]{" + s + "," + e + "}$","ig");
            var numRe=new RegExp("^[0-9]{" + s + "," + e + "}$","ig");
            var abcNumRe=new RegExp("^[a-zA-Z0-9_\-]{" + s + "," + e + "}$","ig");
            if(abcRe.test(trim(str)))
            {
            isMatch=true;
            }
            else if(numRe.test(trim(str)))
            {
            isMatch=true;
            }
            else if(!abcNumRe.test(trim(str)))
            {
            isMatch=true;
            }
           
            return isMatch;
        }
        function trim(s)
        {
            return s.replace(/\s/g, "");
        }
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    • 已标记为答案 lfj0912 2009年8月4日 8:44
    2009年8月4日 7:45
    版主