如何验证必须为整数、非负数、非小数且不是字符串的值? (或字母词)来自 InputQuery?

How to validate values that must be integer, non negative, non decimal and not a string? (Or an alphabetic word) from an InputQuery?

我正在使用 InputQuery 从用户那里捕获值,但它只能是整数 (from 1 to 9999999...),不能是小数,也不能是字符串(不是 ABCDEF)或字母数字( A1B2C3) 而不是特殊的甜菜 (Hi!,)。在 delphi `RAD STUDIO 2010.

范围是捕获值,然后显示一条消息,告诉用户他必须只输入有效值。

我怎样才能做到这一点?

这很简单:

var
  s: string;
  i: Integer;
begin

  if InputQuery(Caption, 'Please enter a positive integer:', s) then
    if TryStrToInt(s, i) and (i > 0) then
      ShowMessage('An excellent choice, sir!')
    else
      ShowMessage('That''s not a positive integer, is it?')

如果用户取消它(这是预期的),这将显示提示并且不执行任何操作。另一方面,如果用户确实输入了一个值,则会使用 TryStrToInt 和简单的符号测试对其进行验证。

请注意,由于布尔短路求值,第二个合取 (i > 0) 只会在第一个合取 (TryStrToInt(s, i)) 求得 True 时求值,所以我们永远不会测试未初始化的变量 i(不过在这种情况下并不重要)。

您可能还想使用 a more sophisticated input box 自动验证对话框中的输入(免责声明:我的网站)。


或者,您可以使用 InputQuery 函数自己的验证功能,这将在用户单击“确定”时验证输入:

var
  s: array of string;
  i: Integer;
begin
  SetLength(s, 1);
  if InputQuery(Caption, ['Please enter a positive integer:'], s,
    function(const Values: array of string): Boolean
    begin
      Result := (Length(Values) = 1) and TryStrToInt(Values[0], i) and (i > 0);
      if not Result then
        ShowMessage('That''s not a positive integer, is it?')
    end)
  then
    ShowMessageFmt('You chose %d. That''s an excellent choice, sir!', [i]);