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