Return Google 表格中手机号码的有效性状态

Return validity status for mobile numbers in Google Sheets

我已经尝试在 Google 表格中创建一个公式,returns 四种状态之一基于对列中提供的手机号码的评估。

四尊雕像是:

我有一个查询 table,它列出了所有国际代码及其最短和最长的号码限制。

心愿单:

  1. 转换为数组公式,这样只有有数据的行 评估。
  2. 当查找 returns 出错时(在 VLOOKUP 评估中未找到值。),显示值(国家代码无效)

我的演示 sheet 在这里 (editable): https://docs.google.com/spreadsheets/d/1YZAVxdEcYlkj70EfCBKdABbkhflS2m3NZPbrNkb1nM0/edit?usp=sharing

供参考,我的公式是:

=IFS( AND(ISBLANK(VLOOKUP(TO_TEXT(REGEXEXTRACT(A2,"\d+")),Lookup!B:D,3,FALSE)),TO_TEXT(LEN(REGEXEXTRACT(A2,"[0-9.]+$"))) <> VLOOKUP(REGEXEXTRACT(A2,"\d+"),Lookup!B:D,2,FALSE)),"Invalid", AND(ISBLANK(VLOOKUP(TO_TEXT(REGEXEXTRACT(A2,"\d+")),Lookup!B:D,3,FALSE)),TO_TEXT(LEN(REGEXEXTRACT(A2,"[0-9.]+$"))) = VLOOKUP(REGEXEXTRACT(A2,"\d+"),Lookup!B:D,2,FALSE)),"Valid", AND(NOT(ISBLANK(VLOOKUP(TO_TEXT(REGEXEXTRACT(A2,"\d+")),Lookup!B:D,3,FALSE))),ISBETWEEN(VALUE(TO_TEXT(LEN(REGEXEXTRACT(A2,"[0-9.]+$")))),VALUE(VLOOKUP(TO_TEXT(REGEXEXTRACT(A2,"\d+")),Lookup!B:D,2,FALSE)),VALUE(VLOOKUP(TO_TEXT(REGEXEXTRACT(A2,"\d+")),Lookup!B:D,3,FALSE)))),"Valid (range)", IF(AND(TO_TEXT(LEN(REGEXEXTRACT(A2,"[0-9.]+$"))) < VLOOKUP(REGEXEXTRACT(A2,"\d+"),Lookup!B:D,2,FALSE),TO_TEXT(LEN(REGEXEXTRACT(A2,"[0-9.]+$"))) > VLOOKUP(REGEXEXTRACT(A2,"\d+"),Lookup!B:D,3,FALSE)),TRUE),"Invalid (range)")

试试这个:

=ARRAYFORMULA(
  IF(
    A2:A = "",,
      REGEXMATCH(
        REGEXEXTRACT(A2:A, "\s+(\d+)"),
          "^\d{"
        & VLOOKUP(
            REGEXEXTRACT(A2:A, "\d+"),
            FILTER(
              {
                TO_TEXT(Lookup!B2:B),
                Lookup!C2:C & IF(Lookup!D2:D = "",, "," & Lookup!D2:D)
              },
              Lookup!A2:A <> ""
            ),
            2,
          )
        & "}$"
      )
  )
)
  1. 国家代码必须用 space(s) 与号码分开。
  2. 公式returns TRUE 如果该号码对国家有效,FALSE 否则,#N/A 如果没有该国家。