Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Regex替换非数字字符,并在键入电话号码时插入破折号_Javascript_Regex - Fatal编程技术网

Javascript Regex替换非数字字符,并在键入电话号码时插入破折号

Javascript Regex替换非数字字符,并在键入电话号码时插入破折号,javascript,regex,Javascript,Regex,我需要javascript来格式化键入的电话号码。这将替换所有非数字字符,并在用户未键入时插入破折号。到目前为止,这是我得到的最接近的一次,但是如果他们在错误的位置放了一个破折号,它就会被扔掉。理想的解决方案是只在错误的位置替换破折号。我正在寻找一种可能以不同方式替换第4位和第8位的方法,但还没有找到解决方案 $('#TelephoneNo').keyup(function (ev) { if (/[^0-9\-]/g.test(this.value)) {

我需要javascript来格式化键入的电话号码。这将替换所有非数字字符,并在用户未键入时插入破折号。到目前为止,这是我得到的最接近的一次,但是如果他们在错误的位置放了一个破折号,它就会被扔掉。理想的解决方案是只在错误的位置替换破折号。我正在寻找一种可能以不同方式替换第4位和第8位的方法,但还没有找到解决方案

$('#TelephoneNo').keyup(function (ev) {
        if (/[^0-9\-]/g.test(this.value))
        {
            this.value = this.value.replace(/[^0-9\-]/g, '');
        }

        if (/^(\d{3})(\d)/.test(this.value))
        {
            this.value = this.value.replace(/^(\d{3})(\d)/, '$1-$2');
        }

        if (/^(\d{3}-\d{3})(\d)/.test(this.value))
        {
            this.value = this.value.replace(/^(\d{3}-\d{3})(\d)/, '$1-$2');
        }
    });

假设您需要“123-456-7890”格式:


函数CheckNum(ev){
var inputval=document.getElementById(“电话号码”).value;
调试器
如果(输入值){
如果(/[^0-9\-]/g.test(输入值))
{
inputval=inputval.replace(/[^0-9\-]/g');
}
if(检测位置()){
if(/^(\d{3})(\d)/.test(inputval))
{
inputval=inputval.replace(/^(\d{3})(\d)/,“$1-$2”);
}
if(/^(\d{3}-\d{3})(\d)/.test(inputval))
{
inputval=inputval.replace(/^(\d{3}-\d{3})(\d)/,“$1-$2”);
}
}
document.getElementById(“电话号码”).value=inputval;
}
}
函数detectPosition(){var inputval=document.getElementById(“电话号码”).value;
if(inputval.indexOf(“-”==4 | | inputval.indexOf(“-”==8)
{
返回1;
}
返回-1;
}

我强烈建议您这样做可以节省时间和头痛!另一个很好的选择是jQuery掩码:我认为这不起作用,因为键入的数字是空的,除非有10个数字。你能给我你期望的输出999-999-9999格式是正确的吗。事件在每次键入字符时发生。如果用户键入1234,则将文本更改为123-4;如果用户键入123-4567,则文本更改为123-456-7。是的,除非用户在错误的位置键入破折号,否则该代码有效。例如,99-99将完全停止格式化。我需要一个解决方案,该解决方案可以将破折号的格式设置为与999-999-9999匹配,即使该数字是部分键入的。如果不允许用户键入“-”,则不存在不正确的可能性。如果我使用/[^0-9]/g,如果他们决定自行设置破折号的格式,则会不断删除该破折号,这可能会造成混乱。如果破折号正好插入三个数字之后,而不是等待第四个.if(inputval.indexOf(“-”==4 | | inputval.indexOf(“-”==8){alert(inputval.indexOf(“-”);}
function formatPhoneNumber(s) {
  var s2 = (""+s).replace(/\D/g, '');
  var m = s2.match(/^(\d{3})(\d{3})(\d{4})$/);
  return (!m) ? null : m[1] + " -" + m[2] + "-" + m[3];
}
<html>
<head>
 <script type="text/javascript">

 function CheckNum(ev) {
 var inputval=document.getElementById("TelephoneNo").value;
  debugger
 if(inputval){
        if (/[^0-9\-]/g.test(inputval))
        {
            inputval = inputval.replace(/[^0-9\-]/g, '');
        }
        if(detectPosition()){
        if (/^(\d{3})(\d)/.test(inputval))
        {
            inputval = inputval.replace(/^(\d{3})(\d)/, '$1-$2');
        }

        if (/^(\d{3}-\d{3})(\d)/.test(inputval))
        {
            inputval = inputval.replace(/^(\d{3}-\d{3})(\d)/, '$1-$2');
        }
        }
        document.getElementById("TelephoneNo").value=inputval;
    }
}

function detectPosition() {   var inputval=document.getElementById("TelephoneNo").value;   
 if(inputval.indexOf("-") ==4 || inputval.indexOf("-") ==8)
 {
  return 1;
 }
  return -1;
 }
</script>

</head>
<body>        
<input type="text" id="TelephoneNo" onkeyup="CheckNum(this)">
</body>
</html>