Google Apps 脚本 - 有条件的用户输入 - 数字提示
Google Apps Script - conditional user input - number prompt
我需要获取用户输入,它应该是一个正整数(整数)。我想出了如果输入不是数字如何继续显示提示,但我无法弄清楚如何为数字值编写条件。
这是代码。
var ui = SpreadsheetApp.getUi(); // Same variations.
do {
var result = ui.prompt(
'Please fill in',
'Please enter number of people involved',
ui.ButtonSet.OK_CANCEL);
var text = parseInt(result.getResponseText());
var button = result.getSelectedButton();
}
while (!(button == ui.Button.CANCEL) && isNaN(parseInt(text)) && !(button == ui.Button.CLOSE));
var button = result.getSelectedButton();
if (button == ui.Button.OK) {
ui.alert('Number of people wanted: ' + text + '.');
} else if (button == ui.Button.CANCEL) {
ui.alert('Action cancelled.');
return;
} else if (button == ui.Button.CLOSE) {
ui.alert('Action cancelled.');
return;
}
在我看来,我尝试了 <、>、!、&&、|| 的所有可能组合,但没有任何效果..
- 你只想在值为正整数时退出while循环。
如果我的理解是正确的,这个修改怎么样?我认为您的情况有几个答案。所以请把这当作其中之一。
修改后的脚本:
从:
while (!(button == ui.Button.CANCEL) && isNaN(parseInt(text)) && !(button == ui.Button.CLOSE));
到:
while (!(button == ui.Button.CANCEL) && !(/^[0-9]+$/.test(text)) && !(button == ui.Button.CLOSE));
参考:
如果我误解了你的问题,请告诉我。我想修改一下。
编辑:
在您当前修改的脚本中,例如,如果输入 123-456
和 123abc
等值,则会检索 123
。这是由于 var text = parseInt(result.getResponseText())
.
如果您不想这样做,请将var text = parseInt(result.getResponseText())
修改为var text = result.getResponseText()
。这样,当输入这样的值时,它不会退出while循环。
您必须在循环本身中检查文本的值。原因是如果您在变量文本中有 NaN
值并尝试检查其值是否小于零,即 text < 0
。它总是 return false,这会导致 while 循环中断并导致剩余代码执行。
您必须按特定顺序检查变量文本的值:
1)检查它是否是一个数字
2)如果是数字,检查它是否小于零
3)如果小于零,检查提示是否被取消或关闭?
4) 如果两者都不是,则将text 的值更改为NaN,这将导致循环继续执行。像这样:
if (!isNaN(text)){
if( text < 0 ){
if(!(button == ui.Button.CANCEL) && !(button == ui.Button.CLOSE))
text = NaN
}
}
这将是您的最终代码:
function checkNum(){
var ui = SpreadsheetApp.getUi(); // Same variations.
do {
var result = ui.prompt(
'Please fill in',
'Please enter number of people involved',
ui.ButtonSet.OK_CANCEL);
var text = parseInt(result.getResponseText());
var button = result.getSelectedButton();
if (!isNaN(text)){
if( text < 0 ){
if(!(button == ui.Button.CANCEL) && !(button == ui.Button.CLOSE))
text = NaN
}
}
}
while ((!(button == ui.Button.CANCEL) && !(button == ui.Button.CLOSE) && isNaN(text)));
//var button = result.getSelectedButton();
if (button == ui.Button.OK) {
ui.alert('Number of people wanted: ' + text + '.');
} else if (button == ui.Button.CANCEL) {
ui.alert('Action cancelled.');
return;
} else if (button == ui.Button.CLOSE) {
ui.alert('Action cancelled.');
return;
}
}
我需要获取用户输入,它应该是一个正整数(整数)。我想出了如果输入不是数字如何继续显示提示,但我无法弄清楚如何为数字值编写条件。 这是代码。
var ui = SpreadsheetApp.getUi(); // Same variations.
do {
var result = ui.prompt(
'Please fill in',
'Please enter number of people involved',
ui.ButtonSet.OK_CANCEL);
var text = parseInt(result.getResponseText());
var button = result.getSelectedButton();
}
while (!(button == ui.Button.CANCEL) && isNaN(parseInt(text)) && !(button == ui.Button.CLOSE));
var button = result.getSelectedButton();
if (button == ui.Button.OK) {
ui.alert('Number of people wanted: ' + text + '.');
} else if (button == ui.Button.CANCEL) {
ui.alert('Action cancelled.');
return;
} else if (button == ui.Button.CLOSE) {
ui.alert('Action cancelled.');
return;
}
在我看来,我尝试了 <、>、!、&&、|| 的所有可能组合,但没有任何效果..
- 你只想在值为正整数时退出while循环。
如果我的理解是正确的,这个修改怎么样?我认为您的情况有几个答案。所以请把这当作其中之一。
修改后的脚本:
从:while (!(button == ui.Button.CANCEL) && isNaN(parseInt(text)) && !(button == ui.Button.CLOSE));
到:
while (!(button == ui.Button.CANCEL) && !(/^[0-9]+$/.test(text)) && !(button == ui.Button.CLOSE));
参考:
如果我误解了你的问题,请告诉我。我想修改一下。
编辑:
在您当前修改的脚本中,例如,如果输入 123-456
和 123abc
等值,则会检索 123
。这是由于 var text = parseInt(result.getResponseText())
.
如果您不想这样做,请将var text = parseInt(result.getResponseText())
修改为var text = result.getResponseText()
。这样,当输入这样的值时,它不会退出while循环。
您必须在循环本身中检查文本的值。原因是如果您在变量文本中有 NaN
值并尝试检查其值是否小于零,即 text < 0
。它总是 return false,这会导致 while 循环中断并导致剩余代码执行。
您必须按特定顺序检查变量文本的值: 1)检查它是否是一个数字 2)如果是数字,检查它是否小于零 3)如果小于零,检查提示是否被取消或关闭? 4) 如果两者都不是,则将text 的值更改为NaN,这将导致循环继续执行。像这样:
if (!isNaN(text)){
if( text < 0 ){
if(!(button == ui.Button.CANCEL) && !(button == ui.Button.CLOSE))
text = NaN
}
}
这将是您的最终代码:
function checkNum(){
var ui = SpreadsheetApp.getUi(); // Same variations.
do {
var result = ui.prompt(
'Please fill in',
'Please enter number of people involved',
ui.ButtonSet.OK_CANCEL);
var text = parseInt(result.getResponseText());
var button = result.getSelectedButton();
if (!isNaN(text)){
if( text < 0 ){
if(!(button == ui.Button.CANCEL) && !(button == ui.Button.CLOSE))
text = NaN
}
}
}
while ((!(button == ui.Button.CANCEL) && !(button == ui.Button.CLOSE) && isNaN(text)));
//var button = result.getSelectedButton();
if (button == ui.Button.OK) {
ui.alert('Number of people wanted: ' + text + '.');
} else if (button == ui.Button.CANCEL) {
ui.alert('Action cancelled.');
return;
} else if (button == ui.Button.CLOSE) {
ui.alert('Action cancelled.');
return;
}
}