请求提供LibreCalc中验证合法IP与URL的有效公式及宏
LibreCalc IP地址与URL验证解决方案
一、完善的IP地址验证方案
方案1:使用TEXTSPLIT的数组公式(适合LibreCalc 7.0+)
这个公式能全面验证IPv4地址的合法性,覆盖段数、数值范围和前导零规则:
=AND( (LEN(A1)-LEN(SUBSTITUTE(A1,".","")))=3, ISNUMBER(TEXTSPLIT(A1,".")+0), MIN(TEXTSPLIT(A1,".")+0)>=0, MAX(TEXTSPLIT(A1,".")+0)<=255, SUMPRODUCT(--(LEFT(TEXTSPLIT(A1,"."),1)="0")*(LEN(TEXTSPLIT(A1,"."))>1))=0 )
注意:输入时需按Ctrl+Shift+Enter触发数组计算,返回
TRUE为合法IP,FALSE为非法。
各部分作用:
- 第一行:检查是否恰好有3个分隔点
- 第二行:验证拆分后的每一段都是纯数字
- 第三、四行:确保每段数值在0-255之间
- 第五行:排除长度大于1但以0开头的段(如
01.123.45.67这类非法格式)
方案2:兼容旧版LibreCalc的普通公式
如果你的版本不支持TEXTSPLIT,用手动提取每段的方式验证:
=AND( (LEN(A1)-LEN(SUBSTITUTE(A1,".","")))=3, ISNUMBER(--LEFT(A1,FIND(".",A1)-1)), --LEFT(A1,FIND(".",A1)-1)>=0, --LEFT(A1,FIND(".",A1)-1)<=255, IF(LEN(LEFT(A1,FIND(".",A1)-1))>1, LEFT(LEFT(A1,FIND(".",A1)-1),1)<>"0", TRUE), ISNUMBER(--MID(A1,FIND(".",A1)+1,FIND(".",A1,FIND(".",A1)+1)-FIND(".",A1)-1)), --MID(A1,FIND(".",A1)+1,FIND(".",A1,FIND(".",A1)+1)-FIND(".",A1)-1)>=0, --MID(A1,FIND(".",A1)+1,FIND(".",A1,FIND(".",A1)+1)-FIND(".",A1)-1)<=255, IF(LEN(MID(A1,FIND(".",A1)+1,FIND(".",A1,FIND(".",A1)+1)-FIND(".",A1)-1))>1, LEFT(MID(A1,FIND(".",A1)+1,FIND(".",A1,FIND(".",A1)+1)-FIND(".",A1)-1),1)<>"0", TRUE), ISNUMBER(--MID(A1,FIND(".",A1,FIND(".",A1)+1)+1,FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1)-FIND(".",A1,FIND(".",A1)+1)-1)), --MID(A1,FIND(".",A1,FIND(".",A1)+1)+1,FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1)-FIND(".",A1,FIND(".",A1)+1)-1)>=0, --MID(A1,FIND(".",A1,FIND(".",A1)+1)+1,FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1)-FIND(".",A1,FIND(".",A1)+1)-1)<=255, IF(LEN(MID(A1,FIND(".",A1,FIND(".",A1)+1)+1,FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1)-FIND(".",A1,FIND(".",A1)+1)-1))>1, LEFT(MID(A1,FIND(".",A1,FIND(".",A1)+1)+1,FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1)-FIND(".",A1,FIND(".",A1)+1)-1),1)<>"0", TRUE), ISNUMBER(--RIGHT(A1,LEN(A1)-FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1))), --RIGHT(A1,LEN(A1)-FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1))>=0, --RIGHT(A1,LEN(A1)-FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1))<=255, IF(LEN(RIGHT(A1,LEN(A1)-FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1))>1, LEFT(RIGHT(A1,LEN(A1)-FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1)),1)<>"0", TRUE) )
返回TRUE为合法IP,可配合条件格式快速标记非法地址。
二、URL验证方案
1. 改进版公式验证
针对原公式的不足,增加域名结构检查:
=IF( AND( OR(LEFT(B1,7)="http://", LEFT(B1,8)="https://"), LEN(B1)>LEN(LEFT(B1,IF(LEFT(B1,8)="https://",8,7))), ISNUMBER(FIND(".",B1,IF(LEFT(B1,8)="https://",9,8))) ), "Valid URL", "Not a valid URL" )
作用:
- 验证开头是否为
http://或https:// - 确保协议后有实际内容
- 检查协议后的部分包含至少一个点(符合基本域名格式)
2. 高精度宏验证(正则表达式)
如果需要更严格的验证,用LibreOffice Basic宏实现正则匹配:
- 按
Alt+F11打开宏编辑器 - 右键点击左侧"我的宏"→"插入"→"模块"
- 粘贴以下代码:
Function IsValidURL(cellContent As String) As String Dim regex As Object Set regex = CreateObject("VBScript.RegExp") ' 正则规则:匹配http/https开头,带合法域名和可选路径的URL regex.Pattern = "^(https?:\/\/)([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$" regex.IgnoreCase = True ' 忽略大小写 If regex.Test(cellContent) Then IsValidURL = "Valid URL" Else IsValidURL = "Not a valid URL" End If End Function
- 回到表格,在目标单元格输入
=IsValidURL(B1)即可获取验证结果。
内容的提问来源于stack exchange,提问作者john peter1986
相关产品推荐
相关产品推荐

