我需要获取用户输入,该输入应为正整数(整数)。我想出了如果输入的不是数字,如何保持显示提示,但我想不出如何写数字值的条件。 这是代码。
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;
}
我认为,我尝试了<,>,!,&&,||的所有可能组合,但没有任何效果。
答案 0 :(得分:2)
如果我的理解是正确的,那么该修改如何?我认为您的情况有几个答案。因此,请仅考虑其中之一。
</body>
至:
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())
。这样,当输入这些值时,它不会退出while循环。
答案 1 :(得分:1)
您将必须在循环本身中检查文本的值。原因是如果变量文本中有NaN
值,并尝试检查其值是否小于零,即text < 0
。它将始终返回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;
}
}