2017-04-13 15 views
1

나는 사람들이 자신의 이름, 나이, 성별, 직업 및 현재 질병을 입력 할 수있는 텍스트 상자가있는 창을 가지고 있으며 텍스트 파일에 저장됩니다.SFML의 TGUI 라이브러리에서 입력 유효성 확인

저는 SFML을 사용하여 배경을 만들고 다른 메뉴 항목과 TGUI 라이브러리를 텍스트 상자로 처리하고 있습니다.

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

그러나, 내가 입력을 검증 할 필요가 다음 TGUI 웹 사이트의 튜토리얼에 따라

, 나는 예를 들어, 상자에서 텍스트를 얻고 문자열 및 사용으로 변환 할 수 있어요 이름은 한 단어이고 특수 문자 나 숫자는 아니며 공백이나 특수 문자가없는 공백이나 숫자는 제외됩니다.

어떻게해야합니까? 내 초보자 마음에서, 예를 들어 "나이"를 생각하면, 나는 특수 문자와 [AZ]와 [az]의 배열을 가지고 for 루프를 사용하여 문자열의 각 요소를 각 요소에 체크 인합니다. 배열 그러나 이것은 매우 비효율적 인 것처럼 보인다.

답변

1

두 가지 방법이 있습니다. 편집 상자에서 허용되는 문자를 제한하려면 수용 가능한 입력을 지정하는 setInputValidator function을 사용하면됩니다. 당신은 단지 사용자가 다음 숫자를 입력 할 경우 바로 다음 함수를 호출 : 당신이 원하는대로 검증이 복잡 할 수

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

setInputValidator 기능은 매개 변수로 정규식 문자열을 취할 수 있습니다.

두 번째 방법은 나중에 수동으로 확인하는 것입니다 (Henri Prudhomme's answer의 모든 문자를 살펴보십시오). 이렇게하면 사용자가 입력란에 잘못된 콘텐츠를 입력 한 다음 예를 들어 값이 유효하지 않음을 나타 내기 위해 편집 상자의 색상을 변경하십시오.

두 번째 방법은 더 복잡한 경우에 더 좋습니다. 10-20 사이의 숫자로 입력을 제한하고 싶다고 가정 해보십시오. setInputValidator에 정규식을 사용하면됩니다. 그러나 사용자가 1을 입력하기 시작하면 그 뒤에 다른 숫자를 입력 할 의도가 있으므로 입력이 거부되고 아무 것도 입력되지 않습니다. 편집 상자에 추가되었습니다. 이 경우 가장 좋은 방법은 아마도 두 가지 방법의 조합 일 것입니다. setInputValidator은 숫자가 아닌 모든 입력을 걸러 낸 다음 수동으로 그 숫자가 원하는 범위 내에 있는지 확인합니다.

+0

감사합니다. 매우 유용합니다. – ArmenHeat

1

한 가지 방법은 각 문자열을 통해 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 값 차트를 검색합니다.

이 질문에 대한 답변이 있으면 답변으로 표시하십시오. 희망이 도움이됩니다.

+0

이것은 매우 도움이됩니다. 감사합니다. 또한, ASCII 값 도표를 보면,'name [I] <92'는''91'이어야하고,''{ ''}은 여전히 ​​허용 될 것입니다. – ArmenHeat

+0

당신 말이 맞아요. 나는 그것을 만들었어야했다. –

+0

아스키 값을 직접 사용하지 말고 단순히 문자를 입력하는 것이 좋을 것이다 :'if (! (name [I]> = 'A'&& name [I] <= 'Z'))'. 그렇게 코드를 이해하는 것이 더 쉽습니다. – texus