Regex 使用谷歌应用程序脚本将电话号码从1XXXXXXXXX格式化为xxx XXXXX

Regex 使用谷歌应用程序脚本将电话号码从1XXXXXXXXX格式化为xxx XXXXX,regex,google-apps-script,google-sheets,google-sheets-formula,array-formulas,Regex,Google Apps Script,Google Sheets,Google Sheets Formula,Array Formulas,我正在尝试修改下面的谷歌应用程序脚本,将手机号码从 11位到10位,带连字符。因此,脚本需要删除前导1并添加连字符 例如:19734776262到973-477-6262 以下脚本的作用正好相反。发现 如果公式解决方案对您有效,以下是我的方法,否则请原谅我的误解: =CONCATENATE(left(right(A1,len(A1)-1),3),"-",mid(right(A1,len(A1)-1),4,3),"-",right(A1,4)) 如前所述,

我正在尝试修改下面的谷歌应用程序脚本,将手机号码从

11位到10位,带连字符。因此,脚本需要删除前导1并添加连字符

例如:19734776262到973-477-6262

以下脚本的作用正好相反。发现


如果公式解决方案对您有效,以下是我的方法,否则请原谅我的误解:

=CONCATENATE(left(right(A1,len(A1)-1),3),"-",mid(right(A1,len(A1)-1),4,3),"-",right(A1,4))

如前所述,“如果公式解决方案对您有效,我的方法是”

要将上述公式应用于一系列单元格,请使用:

=ArrayFormula(IF(I1:I="",,REGEXEXTRACT(TEXT(I1:I,"0-000-000-0000"),"-(.*)")))
(请根据您的需要调整范围)

使用的功能:

使用:

  • REGEXREPLACE
    以下模式

    • (?:^1)?
      -前导的
      1
      (可选)-非捕获组
    • \d{3}
      -恰好出现3次
      d
      igit
    • (…)
      -捕获组
      $1
  • 替换为
    -$1
    -前导连字符
    -
    和捕获的组

  • RIGHT
    获取最右边的12个字符

如果你真的想要一个脚本而不是一个公式,这个脚本就可以了。(我修改了您提供的。)


它只是从输入中获取子字符串块并将它们连接在一起。

您知道如何从字符串中获取子字符串吗?完美的解决方案!这比我的好。我如何修改你的原始脚本来应用这个公式?我面临的挑战是,数据是通过表单提交来的,因此我不想添加列来格式化数据。这有意义吗?@DataRobot确实有意义。但是,如果您尝试编写脚本以实现所需的结果(通过编辑您的问题),我可能能够帮助您。如果你不知道,考虑做“CODelABS”,谢谢。我在原始帖子中包含的代码实际上是由您编写的。:)@DataRobot似乎是Tanaike写的而不是我。
=REGEXEXTRACT(TEXT(I1,"0-000-000-0000"),"-(.*)")
=ArrayFormula(IF(I1:I="",,REGEXEXTRACT(TEXT(I1:I,"0-000-000-0000"),"-(.*)")))
=RIGHT(REGEXREPLACE(A2,"(?:^1)?(\d{3})","-$1"),12)
function myFunction() 
{
  const sheetName = "Sheet1"; // Please set the sheet name.
  
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  const range = sheet.getRange('D:D');  // Column "D"
  const values = range.getValues();
  const converted = values.map(([v]) => {
    if (/^\d{11}$/.test(v))
    {
      let sv = v.toString();
      return [[sv.substr(1, 3), sv.substr(4, 3), sv.substr(7)].join('-')];
    }
    return [v];
  });
    
  range.setValues(converted);
}