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-456123abc 等值,则会检索 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;
  }
}