[Unity]入力文字の制限について

前回はOS10で新規に追加されたフレームワークについてご紹介しました。
今回は、Unity(C#)で入力文字の制限についてご紹介します。
ニックネームや紹介文の編集機能等、ユーザーに文字を入力してもらう機能は、アプリでもよくみかけるものです。

C#で行う理由について、ほかの言語で制限をかけるといったプログラムは書いたことがありましたが
C#ですこし苦戦した部分があったので記事としてご紹介しようと思います。

まず初めにどういった文字で制限でかける方法については
こちらのサイトを参考にしました。

次にUnityですが、入力機能の作成はモバイルキーボードやNGUIのUIInputを使用することになると思います。
使用方法については調べるとたくさん出てくるので省略します。
今回はUIInputで説明していきます。UIInput.valueで入力された文字が取得できるのでそれで判定の処理を作成します。
制限の判定をするにはRegexを使用することで可能になります。
かな英数字や空白等の文字を判定したい場合は下記のような書き方で
実現が可能になります。

void Start(){
		UIInput input = this.GetComponent<UIInput>();
	    string text = input.value;
	    
	    for (int i = 0; i < text.Length; i++)
	    {
	        if (Regex.IsMatch(text[i].ToString(), @"\w"))//wはかな英数字
	        {
	            //含んでいる
	        }
	        else
	        {
	            //含まれていない
	        }
	    }
	}

私がすこし苦戦したのがASCII文字の判定でした。
上記と同じような処理でコードを書いても、すり抜けてしまいうまく制限がかかりませんでした。
参考にしていた記事では16進数で判定しているようなので、文字列を一度16進数に変換する必要があったようです。

void Start(){
		UIInput input = this.GetComponent<UIInput>();
	    string text = input.value;
	    
	    for (int i = 0; i < text.Length; i++)
	    {
			//16進数に変換
			string str = "\\x" + Convert.ToString(((char)text[i]), 16);
	        if (Regex.IsMatch(text[i].ToString(), @\[\x20-\x7F]"))
	        {
	            //含んでいる
	        }
	        else
	        {
	            //含まれていない
	        }
	    }
	}

上記のようにCovertを使用することで変換ができます。
頭に”\\x”を使用するのはRegexの判定で必要となるので追加しています。

以上で入力文字の制限についてご紹介しました。
最後までご覧いただきありがとうございます。


弊社では全国各地の請負い(ご自宅)で作業協力頂ける、フリーランスエンジニアの方を常時探しております。
ご興味ある方は、お気軽にお問い合わせ下さい。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*