在 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
过滤掉所有非数字输入,然后手动验证数字是否在想要的范围内。
我有一个 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
过滤掉所有非数字输入,然后手动验证数字是否在想要的范围内。