<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>    <script language="javascript">
function foo() {
var textTX = document.getElementById("textTX").value;
var re = /^([1-9]?[\d]*([\-]?[1-9]?[\d]*[;]?)?)*$/;
alert(re.test(textTX));
}
    </script></head>
<body>
    <form id="form1" runat="server">
<div>
<input type="text" id="textTX" style=" width: 300px;"/>
<input type="button" value="Click me" onclick="foo();"/>
</div>
    </form>
</body>
</html>原意是匹配如35;12-34;1;432-123;3;4;5;样子的字符串,上面的表达式似乎可以了,但如果输入一串稍长的,但带字母的串时浏览器就罢工了,响应时间太长,或者干脆等我强行结束进程,这是为啥……

解决方案 »

  1.   

    var re = /^([1-9]?[\d]*([\-]?[1-9]?[\d]*[;]?)?)*$/;
    問号qiantao過多、修改一下正則
      

  2.   

    have a tryvar re = /^(\d+([-]\d+)?;)+$/;
      

  3.   

    我觉得问题出在最后一个*批配的时候,倒致了多次的扫描
    改成这样好像会好些,<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title>    <script language="javascript">
                function foo() {
                    var textTX = document.getElementById("textTX").value;
                    var re = /^([1-9]*)([\-]?)([1-9]+)[;]?[1-9;\-]+$/;
                    alert(re.test(textTX));
                }
        </script></head>
    <body>
        <form id="form1" runat="server">
        <div>
            <input type="text" id="textTX" style=" width: 300px;"/>
            <input type="button" value="Click me" onclick="foo();"/>
        </div>
        </form>
    </body>
    </html>