[英]in Google Apps Script; using Regular Expression & Conditional formatting - to create a IPv4 address validator / checker
我尝试制作一个脚本来获取验证器的反馈,以检查输入的 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> &"")
wildChar_IP
”[通配符]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
然后这个想法是通过“条件格式”( https://developers.google.com/sheets/api/guides/conditional-format#apps-script )使其可视化
欢迎所有帮助。
公式和脚本:
https://drive.google.com/open?id=1HTgdC6Ss8oOvwVm86kbOdlt5jX8UyVmd-Eyo-oWhEGw
(只有读取权限,如果您想测试/检查它,请复制)
备注:(续) 如何在单元格更改或条件格式中动态应用正则表达式?
Google Apps 脚本; 以动态方式实现、更改单元格或以条件格式使用正则表达式。
我相信你的目标如下。
为此,这个答案怎么样?
^(?:(?: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]?)$
被使用. 参考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.