功能:创建角色输入限制中文字数10个,英文字符20,废话不多说直接上代码。
using System.Text.RegularExpressions;
using UnityEngine;
using UnityEngine.UI;
public class InputFieldExt : InputField
{
public int MaxCharLeng = 20;
protected override void Append(char input)
{
string str = input.ToString();
//用正则表达式进行检测 当满足条件的字符可以被输入进去
if (IsChineseOrNumberOrWord(str) && CalculatePlaces(text) < MaxCharLeng)
base.Append(input);
}
private bool IsChineseOrNumberOrWord(string value)
{
Regex rg = new Regex(@"^[u4e00-u9fa5]$|^[dA-Za-z_]|^[.]");
return rg.IsMatch(value);
}
public bool IsCompliance(string value)
{
if (string.IsNullOrEmpty(value)) return false;
if ((CalculatePlaces(value) > MaxCharLeng)) return false;
char[] chars = value.ToCharArray();
foreach (var ch in chars)
{
if (!IsChineseOrNumberOrWord(ch.ToString()))
{
return false;
}
}
return true;
}
///
/// 判断字符长度
///
///
///
private int CalculatePlaces(string mString)
{
int _placesNum = 0; //统计字节位数
char[] _charArray = mString.ToCharArray();
for (int i = 0; i < _charArray.Length; i++)
{
char _eachChar = _charArray[i];
if (_eachChar >= 0x4e00 && _eachChar <= 0x9fa5) //判断中文字符
_placesNum += 2;
else if (_eachChar >= 0x0000 && _eachChar <= 0x00ff) //已2个字节判断
_placesNum += 1;
}
return _placesNum;
}
}
#if UNITY_EDITOR
[UnityEditor.CustomEditor(typeof(InputFieldExt))]
public class InputFieldExtEditor : UnityEditor.UI.InputFieldEditor
{
private UnityEditor.SerializedProperty m_maxCharLeng;
protected override void OnEnable()
{
base.OnEnable();
m_maxCharLeng = serializedObject.FindProperty("MaxCharLeng");
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
serializedObject.Update();
UnityEditor.EditorGUILayout.PropertyField(m_maxCharLeng);
serializedObject.ApplyModifiedProperties();
}
}
#endif



