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