繁体   English   中英

在 Google Apps 脚本中; 使用正则表达式和条件格式 - 创建 IPv4 地址验证器/检查器

[英]in Google Apps Script; using Regular Expression & Conditional formatting - to create a IPv4 address validator / checker

在 Google Apps 脚本中; 使用正则表达式和条件格式 - 创建 IPv4 地址验证/检查器

1. 使用正则表达式验证输入:

我尝试制作一个脚本来获取验证器的反馈,以检查输入的 IP 地址是否是。

正则表达式模式:

单元格“ip:I12”名为“REGEXP_IP_pattern”:

^((((25[0-5])|(2[0-4][0-9])|([01]?[0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|([01]?[0-9]{1,2})))

reg exp 演示https://regexr.com/54fon - 工作正常(在公式中)

单元格中的公式:

在电子表格中 - 公式

在公式中工作正常,但我必须使用公式中的公式来定义状态是否有效。

公式格式的正则表达式工作正常[参见工作表' ip '],但可悲的是我无法让它在脚本中工作。 有一些问题来检索正确和良好的信息,以定义输入“ip”是否有效。 (见“输入”栏,“好IP”)

在公式中: =IF( REGEXREPLACE(TRIM( <cell> &"");REGEXP_IP_pattern;wildChar_IP) = wildChar_IP;1;0)

  • 强制并将单元格转换为字符串: TRIM( <cell> &"")
  • “删除”已建立的正则表达式匹配,并在字符串的 rest 上添加“ wildChar_IP ”[通配符]
  • 检查 rest 是否为“”(在我们的例子中等于“ wildChar_IP ”)

脚本/代码:

对于 Google Apps 脚本,工具>脚本编辑器

要查看记录仪的 output: VIEW > LOGBOOK

那么,如果它只与 function 中的正则表达式匹配,如何获得反馈、状态?

例如 boolean 作为回报。

这是我的代码......但无法定义它何时真正匹配。 由于 autosense/autocomplete 不是很可靠,有没有其他方法可以找出所有的方法

var regExp = new RegExp(regExpPattIP, "gi"); var result01 = regExp.exec(ip01);

代码:

var ip01 ='256.12.2.0'
var ip02 ='255.12.2.0'
var ip03 ='192.168..1'
var ip04 ='10.12.12.12.12'
var ip05 ='010.060.090.002'



function validatorRegExp() {

  //var regExpPattIP ="^((((25[0-5])|(2[0-4][0-9])|([01]?[0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|([01]?[0-9]{1,2})))";
  var regExpPattIP = actSheet.getRangeByName(RegExp_patt_IP).getValue();

  var regExp = new RegExp(regExpPattIP, "gi");  // "i" is for case insensitive --  "g" is for global
  var result01 = regExp.exec(ip01);
  console.log(" --- ip01: ", ip01, "---");
  console.log(result01);
  var result02 = regExp.exec(ip02);
  console.log(" --- ip02: ", ip02, "---");
  console.log(result02);
  var result03 = regExp.exec(ip03);
  console.log(" --- ip03: ", ip03, "---");
  console.log(result03);
  var result04 = regExp.exec(ip04);
  //var result04B = regExp.exec(ip04)[1]; // null - PROBLEM
  console.log(" --- ip04: ", ip04, "---");
  console.log(result04);
  // console.log(result04B);
  console.log(" --- ip05: ", ip05, "---");
  var result05 = regExp.exec(ip05);
  var result05B = regExp.exec(ip05)[1];
  console.log(result05);
  console.log(result05B);


}

结果

[20-05-12 23:54:45:052 CEST]  --- ip01:  256.12.2.0 ---
[20-05-12 23:54:45:054 CEST] null
[20-05-12 23:54:45:056 CEST]  --- ip02:  255.12.2.0 ---
[20-05-12 23:54:45:058 CEST] [ '255.12.2.0',
  '255.12.2.0',
  '2.',
  '2',
  undefined,
  undefined,
  '2',
  '0',
  undefined,
  undefined,
  '0',
  index: 0,
  input: '255.12.2.0',
  groups: undefined ]
[20-05-12 23:54:45:060 CEST]  --- ip03:  192.168..1 ---
[20-05-12 23:54:45:061 CEST] null
[20-05-12 23:54:45:063 CEST]  --- ip04:  10.12.12.12.12 ---   ****** is bad 
[20-05-12 23:54:45:064 CEST] [ '10.12.12.12',
  '10.12.12.12',
  '12.',
  '12',
  undefined,
  undefined,
  '12',
  '12',
  undefined,
  undefined,
  '12',
  index: 0,
  input: '10.12.12.12.12',
  groups: undefined ]
[20-05-12 23:54:45:066 CEST]  --- ip05:  010.060.090.002 ---
[20-05-12 23:54:45:068 CEST] null
[20-05-12 23:54:45:069 CEST] 010.060.090.002

如果您认为“有效”功能会有所帮助,请在此处投票: https://issuetracker.google.com/issues/36762591

2. 使用条件格式可视化输入的“有效”/“无效”*状态*:

然后这个想法是通过“条件格式”( https://developers.google.com/sheets/api/guides/conditional-format#apps-script )使其可视化

欢迎所有帮助。


公式和脚本:

链接电子表格和谷歌脚本:

https://drive.google.com/open?id=1HTgdC6Ss8oOvwVm86kbOdlt5jX8UyVmd-Eyo-oWhEGw

(只有读取权限,如果您想测试/检查它,请复制)

备注:(续) 如何在单元格更改或条件格式中动态应用正则表达式?

Google Apps 脚本; 以动态方式实现、更改单元格或以条件格式使用正则表达式。

我相信你的目标如下。

  • 当使用 Google Apps 脚本检查 IP 地址时,您想要 output boolean 类型。
  • 您想要检查电子表格中的一列。

为此,这个答案怎么样?

修改点:

  • 在这个答案中,作为匹配 IPV4 的正则表达式, ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$被使用. 参考
  • 为了检查并返回 boolean 类型,我为此使用了test()

示例脚本:

示例脚本如下。 在这种情况下,假设“A”列中有 IP 地址。 并将 output 值放入“B”列。

function myFunction() {
  const regExpPattIP = '^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$';
  const regExp = new RegExp(regExpPattIP);
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  const range = sheet.getRange("A1:A" + sheet.getLastRow());
  const values = range.getDisplayValues();
  var res = values.map(([e]) => ([regExp.test(e.trim())]));
  range.offset(0, 1).setValues(res);
}

笔记:

  • 当以下修改反映到上述示例脚本时,有效 IP 地址的单元格颜色会发生变化。

    • var res = values.map(([e]) => ([regExp.test(e.trim())])); range.offset(0, 1).setValues(res);
    • var colors = values.map(([e]) => ([regExp.test(e.trim())? "green": null])); range.setBackgrounds(colors);

结果:

运行上述脚本时,将获得以下结果。 我在“A”列使用了您的示例 IP 地址。 结果放在“B”列。

在此处输入图像描述

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM