using System.Collections; using System.Collections.Generic; using System; using UnityEngine; using UnityEngine.UI; using TMPro; using System.Text.RegularExpressions; public class InputValidator : MonoBehaviour { public enum TypeOfInput { IP, Username, Port } public TypeOfInput InputType; private TMP_InputField inputField; private void Start() { inputField = GetComponent(); if(InputType == TypeOfInput.Port) { inputField.contentType = TMP_InputField.ContentType.IntegerNumber; inputField.text = "7777"; }else if(InputType == TypeOfInput.Username) { inputField.contentType = TMP_InputField.ContentType.Alphanumeric; inputField.characterLimit = 25; } else if(InputType== TypeOfInput.IP) { inputField.contentType = TMP_InputField.ContentType.Standard; } inputField.onValueChanged.AddListener(delegate { ValueChangeCheck(); }); } private void ValueChangeCheck() { //IP if(InputType == TypeOfInput.IP) { int counter = 0; foreach (char c in inputField.text) { //is not 0-9 or dot if (!Char.IsDigit(c)) { if (c != '.') { inputField.text = inputField.text.Remove(counter); counter--; } } else { //Max 3 nummern nacheinander if(counter > 2) { if(Char.IsDigit(inputField.text[counter-1]) && Char.IsDigit(inputField.text[counter - 2]) && Char.IsDigit(inputField.text[counter - 3])) { inputField.text = inputField.text.Remove(counter); counter--; } } } //no double dot if(c == '.' && counter > 0) { if(inputField.text[counter-1] == '.') { inputField.text = inputField.text.Remove(counter); counter--; } } counter++; } //max dots = 3 if (inputField.text.Split(".").Length-1 > 3) { inputField.text = inputField.text.Remove(inputField.text.LastIndexOf(".")); } } if(InputType == TypeOfInput.Port) {//0 - 65535 if (inputField.text[0] == '0') { inputField.text = ""; } if (int.Parse(inputField.text) > 65535) { inputField.text = "65535"; } } } public string GetHelpText() { string helpText = "no help text defined"; if(InputType == TypeOfInput.IP) { helpText = "Only numeric IP-Addresses"; }else if(InputType == TypeOfInput.Username) { helpText = "Only Numbers and Letters"; }else if(InputType == TypeOfInput.Port) { helpText = "Only Numbers (max: 65535)"; } return helpText; } public string GetValidatorTypeName() { string name = "text"; if (InputType == TypeOfInput.IP) { name = "IP-Address"; } else if (InputType == TypeOfInput.Username) { name = "Username"; } else if (InputType == TypeOfInput.Port) { name = "Port"; } return name; } }