栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

Unity UGUI InputField 组件扩展(输入限制,字符判断)

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity UGUI InputField 组件扩展(输入限制,字符判断)

功能:创建角色输入限制中文字数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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/905502.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号