Return Google 表格中手机号码的有效性状态
Return validity status for mobile numbers in Google Sheets
我已经尝试在 Google 表格中创建一个公式,returns 四种状态之一基于对列中提供的手机号码的评估。
四尊雕像是:
- 有效[当数字长度匹配查找 table 值时]
- 无效[当数字长度与查找值不匹配时]
- 有效(范围)[当号码长度介于最短和最长号码长度之间]
- 无效(范围)[当号码长度不在最短和最长号码长度范围内时]
我有一个查询 table,它列出了所有国际代码及其最短和最长的号码限制。
心愿单:
- 转换为数组公式,这样只有有数据的行
评估。
- 当查找 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,
)
& "}$"
)
)
)
- 国家代码必须用 space(s) 与号码分开。
- 公式returns
TRUE
如果该号码对国家有效,FALSE
否则,#N/A
如果没有该国家。
我已经尝试在 Google 表格中创建一个公式,returns 四种状态之一基于对列中提供的手机号码的评估。
四尊雕像是:
- 有效[当数字长度匹配查找 table 值时]
- 无效[当数字长度与查找值不匹配时]
- 有效(范围)[当号码长度介于最短和最长号码长度之间]
- 无效(范围)[当号码长度不在最短和最长号码长度范围内时]
我有一个查询 table,它列出了所有国际代码及其最短和最长的号码限制。
心愿单:
- 转换为数组公式,这样只有有数据的行 评估。
- 当查找 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,
)
& "}$"
)
)
)
- 国家代码必须用 space(s) 与号码分开。
- 公式returns
TRUE
如果该号码对国家有效,FALSE
否则,#N/A
如果没有该国家。