摘要:若是偶數,返回的數值字符串都是短的,若是奇數,則返回的將是一個很大長度的表示值。若則都是數字組成,才會包含字母。
在項目中可能需要隨機生成字母數字組成的字符,如生成3-32位長度的字母數字組合的隨機字符串(位數不固定)或者生成43位隨機字符串(位數固定)
使用Math.random()與toString()方法的結合先看一下這個方式:
Math.random().toString(36);
結果:0.9kfiead48n
toString后的參數規定可以是2-36之間的任意整數,不寫的話默認是10(也就是十進制),此時返回的值就是那個隨機數。
若是偶數,返回的數值字符串都是短的,若是奇數,則返回的將是一個很大長度的表示值。
若<10 則都是數字組成,>10 才會包含字母。
所以如果想得到一長串的隨機字符,則需使用一個 > 10 且是奇數的參數。但是由于返回的是小數點,所以需要截取,可以使用slice(2) 。這兒使用substr()方法。如下:
Math.random().toString(36).substr(2);
結果:p3bz2xrzsam
但是上面的方式只是隨機了,位數不確定。怎樣來控制在一個范圍或者固定的位數呢?看下面的方法。
常規的函數寫法/** 隨機生成固定位數或者一定范圍內的字符串數字組合 * @param {Number} min 范圍最小值 * @param {Number} max 范圍最大值,當不傳遞時表示生成指定位數的組合 * @returns {String} 返回字符串結果 * */ function randomRange(min, max){ var returnStr = "", range = (max ? Math.round(Math.random() * (max-min)) + min : min), arr = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; for(var i=0; i結果:
VkdWQnIOKntsp UoUUNtGJrHVl7UMc9jlvYjUr 1F1ck8I7yV SEPGPzuO5F函數寫法優化想想上面的arr這樣寫太繁瑣,也可以寫成字符串的形式,實現方式也差不多只是稍微變一下:
function randomRange(min, max){ var returnStr = "", range = (max ? Math.round(Math.random() * (max-min)) + min : min), charStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for(var i=0; i結果:
Jpjtfe4S7aOSUAiGuYwK n1mR5bDNf4jRBfM j6HaBH7fZl KbbHNw8V4Y擴展:從指定的字符串生成組合/** 隨機生成固定位數或者一定范圍內的字符串數字組合 * @param {Number} min 范圍最小值 * @param {Number} max 范圍最大值,當不傳遞時表示生成指定位數的組合 * @param {String} charStr指定的字符串中生成組合 * @returns {String} 返回字符串結果 * */ function randomRange(min, max, charStr){ var returnStr = "", range; if(typeof max == "string"){ charStr = max; } range = ((max && typeof max == "number") ? Math.round(Math.random() * (max-min)) + min : min); charStr = charStr || "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for(var i=0; i結果:
La2vVO4jrXZlHVLBs8b5K 1bc0cd1 ae888oluQX 32232進一步優化,不傳遞參數,默認生成指定位數的字符串組合/** 隨機生成固定位數或者一定范圍內的字符串數字組合 * @param {Number} min 范圍最小值 * @param {Number} max 范圍最大值,當不傳遞時表示生成指定位數的組合 * @param {String} charStr指定的字符串中生成組合 * @returns {String} 返回字符串結果 * */ function randomRange(min, max, charStr){ var returnStr = "", range; if(typeof min == "undefined"){ min = 10; } if(typeof max == "string"){ charStr = max; } range = ((max && typeof max == "number") ? Math.round(Math.random() * (max-min)) + min : min); charStr = charStr || "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for(var i=0; i結果:
ohcjkCLtuL在優化,根據ASCII碼生成組合通過打印:
console.log("9".charCodeAt(0)); //0-9ASCII范圍:48-57 console.log("a".charCodeAt(0));// a-zASCII范圍:97-122 console.log("A".charCodeAt(0));// A-ZASCII范圍:65-90常見字符對應的ASCII碼
a-z 97-122
A-Z 65-90
0-9 45-57
其實知道了這個我們就不需要寫那么長的charStr字符串
/** 隨機生成固定位數或者一定范圍內的字符串數字組合 * @param {Number} min 范圍最小值 * @param {Number} max 范圍最大值,當不傳遞時表示生成指定位數的組合 * @param {String} charStr指定的字符串中生成組合 * @returns {String} 返回字符串結果 * */ function randomRange(min, max, charStr){ var returnStr = "", //返回的字符串 range; //生成的字符串長度 //隨機生成字符 var autoGetStr = function(){ var charFun = function(){ var n= Math.floor(Math.random()*62); if(n<10){ return n; //1-10 } else if(n<36){ return String.fromCharCode(n+55); //A-Z } else{ return String.fromCharCode(n+61); //a-z } } while(returnStr.length< range){ returnStr += charFun(); } }; //根據指定的字符串中生成組合 var accordCharStrGet = function(){ for(var i=0; i結果:
S0yIEsPj4Q dff0d Zx93g07ewD 22232參考地址https://www.cnblogs.com/makan/p/4850071.html
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/90508.html
摘要:在這里,詞法解析器應用的規則即為詞匯語法的定義,語法解釋器應用的規則即為表達式語句聲明和函數等的定義。如何編寫簡單的實踐篇 什么是parser? 簡單的說,parser的工作即是將代碼片段轉換成計算機可讀的數據結構的過程。這個計算機可讀的數據結構更專業的說法是抽象語法樹(abstract syntax tree),簡稱AST。AST是代碼片段具體語義的抽象表達,它不包含該段代碼的所有細...
摘要:在數組中循環使用將數組的第一個元素除去直到函數的返回值為。使用匿名內部函數范圍來聲明未定義的內存空間使用閉包來存儲返回值。返回頂部從數組中移除給定函數返回的元素使用查找返回值的數組元素和以使用刪除元素。使用執行從右向左的函數組合。 showImg(https://segmentfault.com/img/bV0PXR?w=400&h=80); Util.js (持續更新中...) ...
摘要:正則表達式理論基礎篇搬運自個人博客原址正則表達式理論基礎篇什么是正則表達式可以稱作規則一個描述字符模式的對象,正則表達式中的字母和數字,都是按照字面含義進行匹配的。 正則表達式-理論基礎篇 搬運自個人博客,原址正則表達式-理論基礎篇 什么是正則表達式?可以稱作規則一個描述字符模式的對象,正則表達式中的字母和數字,都是按照字面含義進行匹配的。強大的字符串匹配工具 如何建立一個正則表達式...
摘要:正則表達式理論基礎篇搬運自個人博客原址正則表達式理論基礎篇什么是正則表達式可以稱作規則一個描述字符模式的對象,正則表達式中的字母和數字,都是按照字面含義進行匹配的。 正則表達式-理論基礎篇 搬運自個人博客,原址正則表達式-理論基礎篇 什么是正則表達式?可以稱作規則一個描述字符模式的對象,正則表達式中的字母和數字,都是按照字面含義進行匹配的。強大的字符串匹配工具 如何建立一個正則表達式...
閱讀 4620·2021-10-25 09:48
閱讀 3212·2021-09-07 09:59
閱讀 2167·2021-09-06 15:01
閱讀 2693·2021-09-02 15:21
閱讀 2732·2019-08-30 14:14
閱讀 2184·2019-08-29 13:59
閱讀 2514·2019-08-29 11:02
閱讀 2533·2019-08-26 13:33