【Angular】文本框輸入限制13個漢字,30個字母,可輸入中文、字母、符號 ,不允許輸入數字

最近用Angular在做一個項目,其中很簡單的一個需求點就是要求客戶姓名的文本框輸入要求:

文本框輸入限制13個漢字,30個字母,可輸入中文、字母、符號 ,不允許輸入數字

說起來挺簡單的,但是做起來想了很久,網上也找了很多文章,都是很片面的,所以要靠自己來整合一下網絡資源,

按自己的思路進行編寫代碼,最終達到了效果,可以分享給大家和我一起看看,也許很多大佬有更簡便的方式,但是我的思路

可能受到了很大的限制,沒有太深入的技術水平,所以就按自己的思路來寫:首先看下文本框的代碼:

<input type="text" class="form-control" placeholder="" ng-change="checkCustomerName()" ng-model="editForm.customerName" >

接下來看下controller裏面的兩個函數:

    $scope.checkCustomerName = function(){
        var vName = $scope.editForm.customerName;
        $scope.editForm.customerName = vName.replace(/[\d]+/g,""); // 限制數字輸入
        vName  =  $scope.editForm.customerName;

        var chineseReg = /^[\u0391-\uFFE5]+$/;
        var letterReg = /^[a-zA-Z]+$/;
        if(vName != ""){
            var vNameLen = vName.length;
            if(chineseReg.test(vName)){
                if(vNameLen > 13){
                    // 限制中文長度
                    $scope.editForm.customerName = vName.substr(0,13);
                }
            }else if(letterReg.test(vName)) {
                if (vNameLen > 30) {
                    // 限制字母長度
                    $scope.editForm.customerName = vName.substr(0, 30);
                }
            }else {
                vNameLen = $scope.getByteLen(vName);
                console.log(vNameLen);
                if(vNameLen > 30){
                    $scope.editForm.customerName = vName.substr(0, 30);
                }
            }
        }
    }

    $scope.getByteLen = function (val) {
        var len = 0;
        for (var i = 0; i < val.length; i++) {
            var a = val.charAt(i);
            if (a.match(/[^\x00-\xff]/ig) != null)
            {
                len += 2;
            }
            else
            {
                len += 1;
            }
        }
        return len;
    }

按此寫法達到了效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章