佚名通过本文主要向大家介绍了js验证手机号码,js正则验证手机号码,js验证身份证号码,js验证电话号码,js表单验证手机号码等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:js验证是否为特选手机号码
描述:
解决方案1:
描述:
特选类型
后四位数字是否是AAAB AABB ABAB AAAA ABBB ABCD 的类型
使用js验证手机号码后四位是否是上述所描述的类型 这个我最初想到的使用正则,难道要对每一种都写一个正则吗?还是有其他的处理方式?欢迎大家指点?正则不太会。如果可以用正则的话也行,顺便也学习下正则,个人感觉写正则更加是思路的产物,需要学习。。
解决方案1:
看楼主已经用正则搞出了除ABCD类型外其他情况的正则匹配,我补充一下判断ABCD型特选号码的方法,经测试是OK的。
function isABCD(str){
var num,arr=[],
for(var i=1;i<=4;i++){
var num=parseInt(str.substr(str.length-i,1),0);
if(!isNaN(num) && arr.length>=i-2 && arr[i-2]-num==1){
onestep++;
}
arr.push(parseInt(num));
}
return onestep<3?false:true;
}
console.log(isABCD("1234")); //true
console.log(isABCD("1235")); //false
console.log(isABCD("0123")); //true
console.log(isABCD("4567")); //true
console.log(isABCD("5678")); //true
console.log(isABCD("0234")); //false
console.log(isABCD("13125636789")); //true
console.log(isABCD("13625636879")); //false
解决方案2:经过今天一天正则表达式的简单学习(主要是根据自己的需求有选择的进行的临时学习),最后我自己的解决方案如下:
function checkNum(mobile)
{
var typeNum = new Array("0123","1234","2345","3456","4567","5678","6789");
var result = typeNum.indexOf(mobile);
return (result>=0)?true:false;
}
function check(mobile)
{
var reMobile1 = /^(?=\d{4}$)(\d)\1(\d)\2/;//匹配AABB AAAA类型
var reMobile2 = /^(?=\d{4}$)(\d)(\d)\1\2/;//匹配ABAB
var reMobile3 = /^(?=\d{4}$)(\d)\1{2}/;//匹配AAAB
var reMobile4 = /^(?=\d{4}$)(\d)(\d)\2{2}/;//匹配ABBB
if (reMobile1.test(mobile) || reMobile2.test(mobile) || reMobile3.test(mobile) || reMobile4.test(mobile) || checkNum(mobile)){
return false;
}else{
return true;
}
}
check("1234");//自行测试
ABCD这个特殊类型没有通过正则写出来,还在研究中,研究出来再和大家共享。js正则表达式语法
大家有不太懂得可以参考上面的,我基本上就是参考的上面的内容。有什么不懂得 也可以提出大家一起讨论学习下。
解决方案3:javascript
function isAdjacent(a, b){ return a.charCodeAt()+1 === b.charCodeAt(); } function isSpecail(mobile){ var tailNum; if (mobile.length != 11){ return false; } tailNum = mobile.slice(-4); if (tailNum.slice(0,3) === tailNum.slice(-1) && "AB".indexOf(tailNum[0]) >= 0){ // AAAA or BBBB mode return true; }else if (tailNum.slice(0,2) === tailNum.slice(-2) && "A".indexOf(tailNum[0]) >= 0){ if(tailNum[0] === tailNum[1] && isAdjacent(tailNum[1], tailNum[2])) { // AABB mode return true; }else if (isAdjacent(tailNum[0], tailNum[1])){ // ABAB mode return true; } }else if ((tailNum.slice(0,2) === tailNum.slice(1,3) || tailNum.slice(-2) === tailNum.slice(1,3)) && (isAdjacent(tailNum[0], tailNum[1]) || isAdjacent(tailNum[2], tailNum[3])) && "B".indexOf(tailNum[3]) >= 0){ // AAAB or ABBB mode return true; }else if (isAdjacent(tailNum[0], tailNum[1]) && isAdjacent(tailNum[1], tailNum[2]) && isAdjacent(tailNum[2], tailNum[3]) && "A".indexOf(tailNum[0]) >= 0){ return true; } return false; }
使用indexOf的地方支持扩展。例如: 四个全等的可将"AB" 改成 '0123456789'
解决方案4:// 手机号码正则待补充,或者在SF其他问题中可以到相关答案
// 取出最后四位数字后
/**
* @param str 4 digit
*/
function isMatch(str) {
var arr = [];
str.split('').forEach(function(item) {
if(arr.indexOf(item) == -1) {
arr.push(item);
}
});
if(arr.length == 1 || arr.length == 2 || arr.length == 4) {
return true;
}
return false;
}
isMatch("1112"); // true
isMatch("1123"); // false
isMatch("1122"); // true
isMatch("1233"); // false
isMatch("1222"); // true
isMatch("1234"); // true
解决方案5:重新回答下,感谢 @Honwhy 指出问题。
判断ABCD的方法:
var isABCD = function(str){
return !!new RegExp('('+str+')').exec('0123456789');
}