jquery实现手机号码选号的方法


Posted in Javascript onJuly 31, 2015

本文实例讲述了jquery实现手机号码选号的方法。分享给大家供大家参考。具体如下:

前段时间看到联通的自由组合套餐非常诱人于是决定换号,但选号是个非常累人的活在免费的号码列表中选了好久都没选到心仪的号码,于是写了个脚本去分析这些手机号码,虽然不是非常准确,但至少把那堆垃圾号码过滤掉了。欢迎拍砖。

代码依赖jQuery,有兴趣的自己重构去除依赖。

建议使用Chrome浏览器的调试工具执行。

jquery手机号码分析评分:

/*class*/RegexpMatchScorer = function (/*Required RegExp*/reg,
                    /*Required Number*/threshold){
 return function(/*Required char[]*/numberArray){
  if(!!numberArray && !!reg && !!threshold){
   var matcheList = numberArray.join().match(reg);
   if(matcheList != null){
    return matcheList.length * threshold;
   }
  }
  return 0;
 };
}
//分析后8位号码计算号码分数
function analyseNumbers(/*Required String[]*/numberList,
            /*Optional Object{begin,size}*/range,
            /*Optional function(char[])[]*/addtionRules){
 //无4号码计分
 function non4(numberArray){
  var threshold = 4;
  if(!numberArray.inArray("4")){
   return threshold;
  }
  return 0;
 }
 //总数字量加分最高10分
 function numberCount(numberArray){
  var threshold = 10;
  var charCount = uniqueArray(numberArray).length;
  return threshold - ((charCount - 1) * (threshold / (numberArray.length - 1)));
 }
 //重复次数加分
 function adjoinRepeat(numberArray){
  var threshold = 2;
  var score = 0;
  for(var i=1;i<numberArray.length;i++){
   var times = 0;
   if(numberArray[i - 1] == numberArray[i]){
    times++;
    score+=threshold*times;
   }else{
    times=0;
   }
  }
  return score;
 }
 //顺数加分(3位以上)
 function straight(numberArray){
  var threshold = 2.5;
  var sideTimes = 2.5//顺数在两端时2.5倍得分
  var inverseTimes = 0.6
  var score = 0;
  for(var i=2;i<numberArray.length;i++){
   var sTimes = 0;
   var iTimes = 0;
   if((Number(numberArray[i])-1==Number(numberArray[i-1]) && Number(numberArray[i])-2==Number(numberArray[i-2]) && ++sTimes)
    || (Number(numberArray[i])+1==Number(numberArray[i-1]) && Number(numberArray[i])+2==Number(numberArray[i-2]) && ++iTimes)
    ){
    var sc = 0;
    if(i == 2 || i == numberArray.length - 1){
     sc = threshold*sideTimes;//顺数在两端时2.5倍得分
    }else{
     sc = threshold;
    }
    score += sc * (sTimes + iTimes*inverseTimes);
   }else{
    sTimes=0;
    iTimes=0;
   }
  }
  return score;
 }
 //数组去复
 function uniqueArray(parr) {
  function _unique(_arr, i){
   if(i>=_arr.length){
    return;
   }
   if(_arr[i] == _arr[i+1]){
    _arr.splice(i+1,1);
    _unique(_arr,i);
   }else{
    _unique(_arr,i+1);
   }
  }
  var arr=parr.slice().sort();
  _unique(arr,0);
  return arr;
 }
 /*************
 * 计分逻辑
 **************/
 var nonRepeatList = uniqueArray(numberList);
 var scorerList = [non4, numberCount, adjoinRepeat, straight,
          new RegexpMatchScorer(new RegExp("(6|8|9)","g"),0.7)];
 if(!!addtionRules){
  scorerList.concat(addtionRules);
 }
 var scoreTable = [];
 //分析号码
 nonRepeatList.forEach(function(data){
  var score = 0;
  var pn = data.toString();
  if(!!range){
   pn = pn.substr(range.begin, range.size);
  }
  var numberArray = pn.split("");
  scorerList.forEach(function(scorer){
   score += scorer(numberArray.slice());
  });
  //发布分数
  scoreTable.push({"number":data, "score":score});
 });
 return scoreTable;
}

抓取号码列表,分析:

//必须在num.10010.com下执行
var url = "http://num.10010.com/NumApp/GoodsDetail/queryMoreNums?callback=&province=51&cityCode=540&rankMoney=&groupKey=65070778&mid=&q_p=51&net=01&roleValue=&preFeeSel=0&keyValue=&Show4GNum=TRUE&q_p=";
var nl = [];
for(var i=1;i<=50;i++){
 var urli = url+i;
 $.get(urli,function(data,status){
  var _json = eval(data);
  for(var j=0;j<(_json.moreNumArray.length/7);j++){
   var idx = j*7;
   var num = _json.moreNumArray[idx];
   nl.push(num);
  }
 });
}
//待上面代码抓取号码完毕后分析号码
//查XX分以上的号码
(function(sc){var x=[];analyseNumbers(nl,{begin:-8,size:8}).forEach(function(d,i){if(d.score>=sc)x.push(d.number+" : "+d.score);}); return x.sort().join("\n");})
(/*score*/10);

希望本文所述对大家的jquery程序设计有所帮助。

Javascript 相关文章推荐
javascript 面向对象的JavaScript类
May 04 Javascript
js中判断数字\字母\中文的正则表达式 (实例)
Jun 29 Javascript
script标签属性type与language使用选择
Dec 02 Javascript
jQuery+css+html实现页面遮罩弹出框
Mar 21 Javascript
JQuery的$命名冲突详细解析
Dec 28 Javascript
JavaScript运行时库属性一览表
Mar 14 Javascript
node.js中的path.basename方法使用说明
Dec 09 Javascript
详解JavaScript中setSeconds()方法的使用
Jun 11 Javascript
jquery ztree实现树的搜索功能
Feb 25 Javascript
Jquery为DIV添加click事件的简单实例
Jun 02 Javascript
AngularJs directive详解及示例代码
Sep 01 Javascript
vue select组件的使用与禁用实现代码
Apr 10 Javascript
javascript文本模板用法实例
Jul 31 #Javascript
Javascript实现网络监测的方法
Jul 31 #Javascript
jquery模拟alert的弹窗插件
Jul 31 #Javascript
JSON字符串转JSON对象
Jul 31 #Javascript
javascript实现简单的页面右下角提示信息框
Jul 31 #Javascript
JavaScript实现快速排序的方法
Jul 31 #Javascript
javascript常用正则表达式汇总
Jul 31 #Javascript
You might like
常用星际术语索引(新手指南)
2020/03/04 星际争霸
收音机的保养
2021/03/01 无线电
php中如何防止表单的重复提交
2013/08/02 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
PHP SplObjectStorage使用实例
2015/05/12 PHP
摘自织梦CMS的HTTP文件下载类
2015/08/08 PHP
WordPress迁移时一些常见问题的解决方法整理
2015/11/24 PHP
JQuery UI皮肤定制
2009/07/27 Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
jQuery实现tab选项卡效果的方法
2015/07/08 Javascript
Angularjs过滤器使用详解
2016/05/25 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
2016/12/21 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
Python yield 小结和实例
2014/04/25 Python
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
python简单区块链模拟详解
2019/07/03 Python
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
Python中的Cookie模块如何使用
2020/06/04 Python
Keras load_model 导入错误的解决方式
2020/06/09 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
2020/07/23 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
一文带你掌握Pyecharts地理数据可视化的方法
2021/02/06 Python
面试后感谢信
2014/02/01 职场文书
初一新生军训方案
2014/05/22 职场文书
电子商务专业自荐信
2014/06/02 职场文书
学习计划书怎么写
2014/09/15 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle