這篇文章主要介紹了jquery實現手機號碼選號的方法,涉及jquery針對手機號碼的分析與篩選技巧,具有一定參考借鑒價值,需要的朋友可以參考下
本文實例講述了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程序設計有所幫助。
新聞熱點
疑難解答
圖片精選