Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.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
循环函数以查找14位数字并为这些结果运行脚本-Javascript_Javascript_Html - Fatal编程技术网

循环函数以查找14位数字并为这些结果运行脚本-Javascript

循环函数以查找14位数字并为这些结果运行脚本-Javascript,javascript,html,Javascript,Html,前言:我有两个文本区。我想粘贴一个未格式化的电话号码列表,以生成一个特定格式的电话号码列表。我想出了如何删除破折号、逗号、空格和字母来生成我需要的格式。我让它添加了一个逗号和一个空格,并删除了最后一个逗号供参考 问题:下面的当前代码按照.replaces的顺序运行良好。我试着将它们组合在一起,但在一些例子中效果不太好,但将它们分开,使其按顺序流动似乎是可行的。然而,我经常有各种各样的电话号码。因此,如果您有555-555-5555-5556,它将输出555555556。14个字符!我想知道在这个

前言:我有两个文本区。我想粘贴一个未格式化的电话号码列表,以生成一个特定格式的电话号码列表。我想出了如何删除破折号、逗号、空格和字母来生成我需要的格式。我让它添加了一个逗号和一个空格,并删除了最后一个逗号供参考

问题:下面的当前代码按照.replaces的顺序运行良好。我试着将它们组合在一起,但在一些例子中效果不太好,但将它们分开,使其按顺序流动似乎是可行的。然而,我经常有各种各样的电话号码。因此,如果您有555-555-5555-5556,它将输出555555556。14个字符!我想知道在这个公式运行之后,是否有办法找到这14个字符,并使用我在下面的代码中找到的另一个代码来输出这些数字的范围。我将在下面发布这两个代码并完成我的思考。理想情况下,我想结合这两个公式

<script language="javascript" type="text/javascript">
function textremv() {
let output = Array.from(
    new Set(
        document.getElementById("content").value
        .replace(/,/g, "") // replace commas with nothing
        .replace(/\n/g, ",\n") //replaces new lines with comma and new line
        .replace(/\s|-/g, "") // replaces space and dash with nothing
        .replace(/[{()}]/g,"") //replaces all special characters with nothing
        .replace(/[a-zA-Z]/g, "") //replaces a-z with nothing
        .replace(/,/g, ",\n") //replaces comma with comma linebreak
        
        
        .split(',')
        
        

    )
).join(", ");
document.getElementById("content2").innerHTML = output + " "; //adds space at the end

}

// [0-9]{10}-[0-9]{4} 
}
function ct() {
  /* Get the text field */
  var copyText = document.getElementById("content2");

  /* Select the text field */
  copyText.select();
  copyText.setSelectionRange(0, 99999); /*For mobile devices*/

  /* Copy the text inside the text field */
  document.execCommand("copy");

  /* Alert the copied text */
  alert("Copied the text: " + copyText.value);
  /* <input type='button' value='Extract Text2' onclick='sortvalues(0);ct()'/> */
}
</script>

<form name="sorter">
<textarea rows='10' cols='20' id='content'></textarea>
<textarea rows='10' cols='20' id='content2'></textarea>
<input type='button' value='Extract Text' onclick='textremv();ct()'/>


</form>
<div id="output"></div>
单个范围与下面的代码一起工作,例如5555-5556将列出两个电话号码

<script language="javascript" type="text/javascript">
function listrange(){
var range = document.getElementById("listrange1").value
var range1 = range.slice(0,10);
var range2 = range.slice(0,7) + range.slice(12,15);
var text = "";
var i = range1;
while (i <= range2) {
  text += i + ", ";
  i++;
}
document.getElementById("listrange2").innerHTML = text;
}

</script>

<textarea rows='10' cols='20' id='listrange1'></textarea>
<textarea rows='10' cols='20' id='listrange2'></textarea>
<input type='button' value='Extract Text' onclick='listrange()'/>
小结:我不确定是否有一种方法可以将公式组合起来,得到这14个字符,然后用我的第二个脚本运行它,生成电话号码范围列表

例如:

555-555-5555 123-456-7890-7891 555-555-5506

应返回以下输出: 5555555555, 1234567890, 1234567891, 55555506

我只是不知道如何让它回顾过去,并寻找这14个字符来应用循环函数

提前谢谢你

编辑:斯科特的答案奏效了!!如果你遇到这个问题,并且像我一样缺乏经验,这里有完整的代码供你使用。此代码假定您提供的是10位电话号码或10位4位范围的电话号码。例:1234567890或1234567890-7899


可搜索关键词:Javascript、电话号码、范围、电话号码范围、客户端、循环

const getRange=str=>{ const[\ux,intro,start,end]=str.match/\d{6}\d{4}\d{4}/ 返回数组.from {length:end-start+1}, __,i=>intro+String+start+i.padStart4,“0” } const phoneNumbers=str=> str.split/[,\s]+///在逗号和/或空格上断开 .map str=>str.replace/\D/g,//删除非数字 .filter Boolean//删除空值 .filter str=>str.length==10 | | str.length==14 .flatMap str=>str.length==14?getRangestr:[str] const text=`第一个是555-555-5555,更多信息:123-456-7890-7893, 范围从0:555-666-0000-0004开始 还有两个:555-555-5506和202-456-1414` //^-白宫总机,如果需要的话
log phoneNumbers text当我运行运行代码段时,我可以看到最终结果是有效的。我真的很不好意思问,但事情是这样的。如何使常量文本从一个名为listrange1的文本区域提取结果并输出到另一个名为listrange2的文本区域?@traveler84:添加了一个HTML代码段谢谢!你提供的例子说明了这一点。然而,我遇到了一个问题,测试编号/范围5555000000-3000返回时没有零。5555000 5555001 5555002…我盯着它看了一会儿。我想这是介绍,开始,结束部分。当它告诉它结束-开始时,我认为系统正在与我前面提供的示例中的0减去3000相混淆。在提供4位数字之前,它似乎没有意识到它应该是前导零。有没有办法在循环中声明这一点?@traveler84:你说得对,我在上面用padStart修复了一个bug。我还修复了另外一个,跳过了那些不是10或14位数长的数字。现在文本中有一个0,它显示在列表中。
<textarea rows='6' cols='50' id='listrange1'></textarea>
<textarea rows='6' cols='50' id='listrange2'></textarea>
<br>
<button id='extract' >Extract Phone Numbers</button>
 
 <script type="text/javascript">
const getRange = (str) => {
  const [_, intro, start, end] = str .match (/(\d{6})(\d{4})(\d{4})/)
  return Array.from({length: end - start + 1}, (__, i) => intro + String(+start + i).padStart(4, '0'))
}

const phoneNumbers = str => 
  str .split (/[,\s]+/)                    // break on commas and/or spaces
    .map (str => str .replace (/\D/g, '')) // remove non-digits
    .filter (Boolean)                      // remove empties
    .filter (str => str .length == 10 || str.length == 14)
    .flatMap (str => str .length == 14 ? getRange(str) : [str])

document.getElementById('extract').onclick = (evt) => 
  document.getElementById('listrange2').innerHTML = 
    phoneNumbers(document.getElementById('listrange1').value).join('\n')
    </script>