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



>我使用InputQuery从用户那里捕获值,但它必须只是一个整数(from 1 to 9999999...),而不是十进制而不是字符串(不是ABCDEF)或不是字母数字(A1B2C3)而不是特殊的字符(Hi!,)。在德尔福的RAD工作室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(不过在这种情况下并不重要)。

您可能还希望使用更复杂的输入框,该框会自动验证对话框本身中的输入(免责声明:我的网站)。


或者,您可以使用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]);

最新更新