在 SFML 的 TGUI 库中验证输入

Validating input in SFML's TGUI library

我有一个 window,我有几个文本框,人们可以在其中输入他们的 名字、年龄、性别、工作和任何当前疾病,这些信息将保存到文本文件中。

我正在使用 SFML 制作 window、处理背景和其他菜单内容以及用于文本框的 TGUI 库。

按照TGUI网站上的教程,我能够从一个框中获取文本并将其转换为字符串并使用,例如:

myfile << Job->getText().toAnsiString() << std::endl;

但是,我需要验证输入,这样 name 只是一个单词,没有特殊字符或数字,Age 只是一个没有空格或特殊字符的 +ve int 等...

我该怎么做?在我的新手看来,例如"age",我能想到的就是有一个特殊字符数组和[A-Z]和[a-z],并使用for循环检查我的字符串中的每个元素到每个数组中的元素。但这似乎很低效。

一种方法是运行 for 循环遍历每个字符串并检查每个字符是否仅落在所需字符的ASCII 范围内。

例如,如果您想要一个仅包含大写字母的名称,您可以键入:

for(int I=0; I<name.length(); I++)
{
    if(!(name[I]>64 && name[I]<92))
    {
        cout << "Bad Name"
        flag = false;
    }
}
if(flag)
{
    cout << "Name is valid";
}

查找 ASCII 值图表以查看哪些字符位于哪些范围内。

如果这回答了您的问题,请将其标记为您的答案!希望这有帮助。

有两种方法可以做到。 要限制编辑框中可接受的字符,您可以简单地使用指定可接受输入的 setInputValidator function。如果您只希望用户键入一个数字,则只需调用以下函数:

editBox->setInputValidator(tgui::EditBox::Validator::UInt);

setInputValidator 函数可以将正则表达式字符串作为参数,因此验证器可以像您想要的那样复杂。

第二种方法是事后手动验证(通过中的所有字符)。这样您就可以允许用户在编辑框中键入不正确的内容,然后例如更改编辑框的颜色以指示该值无效。

第二种方法在更复杂的情况下更好。假设您想将输入限制在 10 到 20 之间。您可以使用 setInputValidator 中的正则表达式来做到这一点,但是当用户开始键入 1 并打算在其后键入另一个数字时,输入被拒绝,编辑框中不添加任何内容。在这种情况下,最好的方法可能是两种方法的结合,让setInputValidator过滤掉所有非数字输入,然后手动验证数字是否在想要的范围内。