摘要:若是偶數(shù),返回的數(shù)值字符串都是短的,若是奇數(shù),則返回的將是一個(gè)很大長(zhǎng)度的表示值。若則都是數(shù)字組成,才會(huì)包含字母。
在項(xiàng)目中可能需要隨機(jī)生成字母數(shù)字組成的字符,如生成3-32位長(zhǎng)度的字母數(shù)字組合的隨機(jī)字符串(位數(shù)不固定)或者生成43位隨機(jī)字符串(位數(shù)固定)
使用Math.random()與toString()方法的結(jié)合先看一下這個(gè)方式:
Math.random().toString(36);
結(jié)果:0.9kfiead48n
toString后的參數(shù)規(guī)定可以是2-36之間的任意整數(shù),不寫(xiě)的話默認(rèn)是10(也就是十進(jìn)制),此時(shí)返回的值就是那個(gè)隨機(jī)數(shù)。
若是偶數(shù),返回的數(shù)值字符串都是短的,若是奇數(shù),則返回的將是一個(gè)很大長(zhǎng)度的表示值。
若<10 則都是數(shù)字組成,>10 才會(huì)包含字母。
所以如果想得到一長(zhǎng)串的隨機(jī)字符,則需使用一個(gè) > 10 且是奇數(shù)的參數(shù)。但是由于返回的是小數(shù)點(diǎn),所以需要截取,可以使用slice(2) 。這兒使用substr()方法。如下:
Math.random().toString(36).substr(2);
結(jié)果:p3bz2xrzsam
但是上面的方式只是隨機(jī)了,位數(shù)不確定。怎樣來(lái)控制在一個(gè)范圍或者固定的位數(shù)呢?看下面的方法。
常規(guī)的函數(shù)寫(xiě)法/** 隨機(jī)生成固定位數(shù)或者一定范圍內(nèi)的字符串?dāng)?shù)字組合 * @param {Number} min 范圍最小值 * @param {Number} max 范圍最大值,當(dāng)不傳遞時(shí)表示生成指定位數(shù)的組合 * @returns {String} 返回字符串結(jié)果 * */ 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結(jié)果:
VkdWQnIOKntsp UoUUNtGJrHVl7UMc9jlvYjUr 1F1ck8I7yV SEPGPzuO5F函數(shù)寫(xiě)法優(yōu)化想想上面的arr這樣寫(xiě)太繁瑣,也可以寫(xiě)成字符串的形式,實(shí)現(xiàn)方式也差不多只是稍微變一下:
function randomRange(min, max){ var returnStr = "", range = (max ? Math.round(Math.random() * (max-min)) + min : min), charStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for(var i=0; i結(jié)果:
Jpjtfe4S7aOSUAiGuYwK n1mR5bDNf4jRBfM j6HaBH7fZl KbbHNw8V4Y擴(kuò)展:從指定的字符串生成組合/** 隨機(jī)生成固定位數(shù)或者一定范圍內(nèi)的字符串?dāng)?shù)字組合 * @param {Number} min 范圍最小值 * @param {Number} max 范圍最大值,當(dāng)不傳遞時(shí)表示生成指定位數(shù)的組合 * @param {String} charStr指定的字符串中生成組合 * @returns {String} 返回字符串結(jié)果 * */ 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結(jié)果:
La2vVO4jrXZlHVLBs8b5K 1bc0cd1 ae888oluQX 32232進(jìn)一步優(yōu)化,不傳遞參數(shù),默認(rèn)生成指定位數(shù)的字符串組合/** 隨機(jī)生成固定位數(shù)或者一定范圍內(nèi)的字符串?dāng)?shù)字組合 * @param {Number} min 范圍最小值 * @param {Number} max 范圍最大值,當(dāng)不傳遞時(shí)表示生成指定位數(shù)的組合 * @param {String} charStr指定的字符串中生成組合 * @returns {String} 返回字符串結(jié)果 * */ 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結(jié)果:
ohcjkCLtuL在優(yōu)化,根據(jù)ASCII碼生成組合通過(guò)打?。?/p>
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常見(jiàn)字符對(duì)應(yīng)的ASCII碼
a-z 97-122
A-Z 65-90
0-9 45-57
其實(shí)知道了這個(gè)我們就不需要寫(xiě)那么長(zhǎng)的charStr字符串
/** 隨機(jī)生成固定位數(shù)或者一定范圍內(nèi)的字符串?dāng)?shù)字組合 * @param {Number} min 范圍最小值 * @param {Number} max 范圍最大值,當(dāng)不傳遞時(shí)表示生成指定位數(shù)的組合 * @param {String} charStr指定的字符串中生成組合 * @returns {String} 返回字符串結(jié)果 * */ function randomRange(min, max, charStr){ var returnStr = "", //返回的字符串 range; //生成的字符串長(zhǎng)度 //隨機(jī)生成字符 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(); } }; //根據(jù)指定的字符串中生成組合 var accordCharStrGet = function(){ for(var i=0; i結(jié)果:
S0yIEsPj4Q dff0d Zx93g07ewD 22232參考地址https://www.cnblogs.com/makan/p/4850071.html
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/90508.html
摘要:在這里,詞法解析器應(yīng)用的規(guī)則即為詞匯語(yǔ)法的定義,語(yǔ)法解釋器應(yīng)用的規(guī)則即為表達(dá)式語(yǔ)句聲明和函數(shù)等的定義。如何編寫(xiě)簡(jiǎn)單的實(shí)踐篇 什么是parser? 簡(jiǎn)單的說(shuō),parser的工作即是將代碼片段轉(zhuǎn)換成計(jì)算機(jī)可讀的數(shù)據(jù)結(jié)構(gòu)的過(guò)程。這個(gè)計(jì)算機(jī)可讀的數(shù)據(jù)結(jié)構(gòu)更專業(yè)的說(shuō)法是抽象語(yǔ)法樹(shù)(abstract syntax tree),簡(jiǎn)稱AST。AST是代碼片段具體語(yǔ)義的抽象表達(dá),它不包含該段代碼的所有細(xì)...
摘要:在數(shù)組中循環(huán)使用將數(shù)組的第一個(gè)元素除去直到函數(shù)的返回值為。使用匿名內(nèi)部函數(shù)范圍來(lái)聲明未定義的內(nèi)存空間使用閉包來(lái)存儲(chǔ)返回值。返回頂部從數(shù)組中移除給定函數(shù)返回的元素使用查找返回值的數(shù)組元素和以使用刪除元素。使用執(zhí)行從右向左的函數(shù)組合。 showImg(https://segmentfault.com/img/bV0PXR?w=400&h=80); Util.js (持續(xù)更新中...) ...
摘要:正則表達(dá)式理論基礎(chǔ)篇搬運(yùn)自個(gè)人博客原址正則表達(dá)式理論基礎(chǔ)篇什么是正則表達(dá)式可以稱作規(guī)則一個(gè)描述字符模式的對(duì)象,正則表達(dá)式中的字母和數(shù)字,都是按照字面含義進(jìn)行匹配的。 正則表達(dá)式-理論基礎(chǔ)篇 搬運(yùn)自個(gè)人博客,原址正則表達(dá)式-理論基礎(chǔ)篇 什么是正則表達(dá)式?可以稱作規(guī)則一個(gè)描述字符模式的對(duì)象,正則表達(dá)式中的字母和數(shù)字,都是按照字面含義進(jìn)行匹配的。強(qiáng)大的字符串匹配工具 如何建立一個(gè)正則表達(dá)式...
摘要:正則表達(dá)式理論基礎(chǔ)篇搬運(yùn)自個(gè)人博客原址正則表達(dá)式理論基礎(chǔ)篇什么是正則表達(dá)式可以稱作規(guī)則一個(gè)描述字符模式的對(duì)象,正則表達(dá)式中的字母和數(shù)字,都是按照字面含義進(jìn)行匹配的。 正則表達(dá)式-理論基礎(chǔ)篇 搬運(yùn)自個(gè)人博客,原址正則表達(dá)式-理論基礎(chǔ)篇 什么是正則表達(dá)式?可以稱作規(guī)則一個(gè)描述字符模式的對(duì)象,正則表達(dá)式中的字母和數(shù)字,都是按照字面含義進(jìn)行匹配的。強(qiáng)大的字符串匹配工具 如何建立一個(gè)正則表達(dá)式...
閱讀 4723·2021-10-25 09:48
閱讀 3292·2021-09-07 09:59
閱讀 2353·2021-09-06 15:01
閱讀 2799·2021-09-02 15:21
閱讀 2775·2019-08-30 14:14
閱讀 2258·2019-08-29 13:59
閱讀 2580·2019-08-29 11:02
閱讀 2592·2019-08-26 13:33