Google Apps脚本-有条件的用户输入-数字提示

时间:2019-01-31 22:41:30

标签: google-apps-script

我需要获取用户输入,该输入应为正整数(整数)。我想出了如果输入的不是数字,如何保持显示提示,但我想不出如何写数字值的条件。 这是代码。

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;
  }

我认为,我尝试了<,>,!,&&,||的所有可能组合,但没有任何效果。

2 个答案:

答案 0 :(得分:2)

  • 仅当值是正整数时,您才想退出while循环。

如果我的理解是正确的,那么该修改如何?我认为您的情况有几个答案。因此,请仅考虑其中之一。

修改后的脚本:

从:
</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;
  }
}