最近用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;
}
按此寫法達到了效果。