<input type="text" onkeyup="this.value=this.value.replace(/\D/g,'').replace(/....(?!$)/g,'$& ')" />

解决方案 »

  1.   

    <!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>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <script type="text/javascript">
    window.onload=function(){
    var t=document.getElementById("test");
    t.onkeydown=change;
    t.onkeyup=change;
    t.onkeypress=change;
    }
    function change(){
    this.value=this.value.replace(/(\d{4})(?=[^\s])/,'$1 ');
    }
    </script>
    </head><body>
    <input type="text" id="test" />
    </body>
    </html>
      

  2.   


    <!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>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <script type="text/javascript">
    window.onload=function(){
    var t=document.getElementById("test");
    t.onkeydown=change;
    t.onkeyup=change;
    t.onkeypress=change;
    }
    function change(){
    this.value=this.value.replace(/(\d{4})(?=[^\s])/,'$1 ');//替换空格前4位数字为4位数字加空格
    }
    </script>
    </head><body>
    <input type="text" id="test" />
    </body>
    </html>
    我帮楼上大哥注释下,这种方法最简单易懂
      

  3.   

    keyup 事件监听    后面用正则替换
    3楼 正解
      

  4.   


    <head>
    <script type="text/javascript">
    window.onload = function() {
        var t = document.getElementById("text");
        t.onkeyup = fun;
    }

    function fun() {
        this.value = this.value.replace(/(\d{4})(?!\s)/g,'$1 ');

    }
    </script>
    </head>
    <body>
      <input type="text" id="text"/>
    </body>
      

  5.   


    你好 你能把第二个replace解释下吗?谢谢
      

  6.   


    你好 你能把第二个replace解释下吗?谢谢
    在非结尾处的4个字符后面加个空格
    (?!$)是预查是否是非结尾处。
      

  7.   


    你好 你能把第二个replace解释下吗?谢谢
    在非结尾处的4个字符后面加个空格
    (?!$)是预查是否是非结尾处。恩 已经搞明白了、、
      

  8.   

    对的,(?!exp)是零宽断言的匹配非exp的位置,都忘记这个了。。
      

  9.   


    你好 你能把第二个replace解释下吗?谢谢
    在非结尾处的4个字符后面加个空格
    (?!$)是预查是否是非结尾处。可以解释一下'$& '吗?看起来像是后向引用,引用前面查找到的那4个.... 咳。。$&是用来引用查找到的整体内容的?还真是第一次见到
      

  10.   


    你好 你能把第二个replace解释下吗?谢谢
    在非结尾处的4个字符后面加个空格
    (?!$)是预查是否是非结尾处。可以解释一下'$& '吗?看起来像是后向引用,引用前面查找到的那4个.... 咳。。$&是用来引用查找到的整体内容的?还真是第一次见到$1 应该知道吧,是第1个子匹配的内容
    那么 $& 就是整个匹配的内容
    此外还有两个不常用的
    $` 是整个匹配之前的内容
    $' 是整个匹配之后的内容
      

  11.   


    你好 你能把第二个replace解释下吗?谢谢
    在非结尾处的4个字符后面加个空格
    (?!$)是预查是否是非结尾处。可以解释一下'$& '吗?看起来像是后向引用,引用前面查找到的那4个.... 咳。。$&是用来引用查找到的整体内容的?还真是第一次见到$1 应该知道吧,是第1个子匹配的内容
    那么 $& 就是整个匹配的内容
    此外还有两个不常用的
    $` 是整个匹配之前的内容
    $' 是整个匹配之后的内容
    厉害
    去翻了一下书,这几个都是RegExp构造函数属性(静态属性):长属性名        短属性名           说明
    input           $_                 最近一次要匹配的字符串.Opera不支持.
    lastMatch       $&                 最近一次的匹配项.Opera不支持.
    lastParen       $+                 最近一次匹配的捕获组.Opera不支持.
    leftContext     $`                 input字符串中lastMatch之前的文本.
    multiline       $*                 是否所有表达式都使用多行模式.IE, Opeara不支持.
    rightContext    $'                 input字符串中lastMatch之后的文本.因为C#写的多, 所以这几个还真没用过~
    惭愧啊,当时看完书还记了笔记的