实时验证和输出带正则表达式的文本字段的问题

时间:2014-12-10 15:51:05

标签: javascript jquery regex

我正在尝试验证并使用

返回文本框输入字段
var ok = phNum.search(/^\(?\d{3}\D*\d{3}\D*\d{4}$/);
if (ok==0) {
  var parts = phNum.match(/^\(?(\d{3})\D*(\d{3})\D*(\d{4})$/);
  output.value='('+parts[1]+') '+parts[2]+'-'+parts[3];
}

应该接受:555-555-1234,5555551234,(555)555-1234等,返回 :( 555)555-1234 at This Demo

这是我的代码

<input id='phone'></input>

<script>
 $("#phone").on("load change keyup paste", function (e) {
    if (e.keyCode == 8) {} else {
        var output;
        var input = $("#phone").val();

        $("#phone").val(output);

        var ok = phNum.search(/^\(?\d{3}\D*\d{3}\D*\d{4}$/);
        if (ok == 0) {
            var parts = phNum.match(/^\(?(\d{3})\D*(\d{3})\D*(\d{4})$/);
            output.value = '(' + parts[1] + ') ' + parts[2] + '-' + parts[3];
        }
    }
});
</script>

但我没有得到结果!能不能让我知道为什么会发生这种情况以及如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您可以使用regex模式匹配器中构建的浏览器代替javascript:

<input id='phone' pattern="/^\(?\d{3}\D*\d{3}\D*\d{4}$/"></input>

和.....“输出”未定义:

var output;

然后你使用它:

$("#phone").val(output); //What's the value of "output" here? : undefined

另外....如果每次更改其值时都检查输入,则在键入第一个数字时也会检查输入。这与你的正则表达式不匹配,所以它将它删除....

编辑:

检查此代码: http://jsfiddle.net/hza0wex5/5/ 如果输入至少有10个字符,它只会格式化数字