본문 바로가기
가이드/Unity, C#

[Unity/C#] ngui Input Field Validation 옵션

by 루엔_vivid 2023. 3. 18.

ngui에서 Input Field 컴포넌트를 통해 게임에서 문자 입력을 받을 수 있는데

해당 컴포넌트를 사용할때 지정할 수 있는 옵션이 있어 알아보았다

 

아래 옵션에 대한 조건이 맞지 않은 문자는 입력시 입력이 되지 않고 제거가 된다


None : 특별한 기능이 없다

 

Integer : int형인 숫자만 입력이 된다

 

Float : int형 + 소숫점 입력이 된다

 

Alphanumeric : 영문과 숫자 입력이 된다

 

Username : 영문과 숫자가 입력 되지만 대문자는 소문자로 변경된다

 

Name : 문자만 입력 되지만 이름의 첫 문자는 대문자로 그다음은 소문자로 변경된다

 

Filename : 알파벳, 숫자, 공백, 특정 기호(-, _, . 등) 일부 특수 문자 사용이 가능하지만

파일 이름으로 사용 불가능한 일부 문자는 제외된다(예 : /, , :, *, ?, ", <, >, | 등)


자세한 부분은 아래 ngui Input Field 코드를 참고하면 된다

protected char Validate (string text, int pos, char ch)
	{
		// Validation is disabled
		if (validation == Validation.None || !enabled) return ch;

		if (validation == Validation.Integer)
		{
			// Integer number validation
			if (ch >= '0' && ch <= '9') return ch;
			if (ch == '-' && pos == 0 && !text.Contains("-")) return ch;
		}
		else if (validation == Validation.Float)
		{
			// Floating-point number
			if (ch >= '0' && ch <= '9') return ch;
			if (ch == '-' && pos == 0 && !text.Contains("-")) return ch;
			if (ch == '.' && !text.Contains(".")) return ch;
		}
		else if (validation == Validation.Alphanumeric)
		{
			// All alphanumeric characters
			if (ch >= 'A' && ch <= 'Z') return ch;
			if (ch >= 'a' && ch <= 'z') return ch;
			if (ch >= '0' && ch <= '9') return ch;
		}
		else if (validation == Validation.Username)
		{
			// Lowercase and numbers
			if (ch >= 'A' && ch <= 'Z') return (char)(ch - 'A' + 'a');
			if (ch >= 'a' && ch <= 'z') return ch;
			if (ch >= '0' && ch <= '9') return ch;
		}
		else if (validation == Validation.Name)
		{
			char lastChar = (text.Length > 0) ? text[Mathf.Clamp(pos, 0, text.Length - 1)] : ' ';
			char nextChar = (text.Length > 0) ? text[Mathf.Clamp(pos + 1, 0, text.Length - 1)] : '\n';

			if (ch >= 'a' && ch <= 'z')
			{
				// Space followed by a letter -- make sure it's capitalized
				if (lastChar == ' ') return (char)(ch - 'a' + 'A');
				return ch;
			}
			else if (ch >= 'A' && ch <= 'Z')
			{
				// Uppercase letters are only allowed after spaces (and apostrophes)
				if (lastChar != ' ' && lastChar != '\'') return (char)(ch - 'A' + 'a');
				return ch;
			}
			else if (ch == '\'')
			{
				// Don't allow more than one apostrophe
				if (lastChar != ' ' && lastChar != '\'' && nextChar != '\'' && !text.Contains("'")) return ch;
			}
			else if (ch == ' ')
			{
				// Don't allow more than one space in a row
				if (lastChar != ' ' && lastChar != '\'' && nextChar != ' ' && nextChar != '\'') return ch;
			}
		}
		return (char)0;
	}
반응형

댓글