成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS基礎(chǔ)篇--通過JS生成由字母與數(shù)字組合的隨機字符串

zhangrxiang / 2021人閱讀

摘要:若是偶數(shù),返回的數(shù)值字符串都是短的,若是奇數(shù),則返回的將是一個很大長度的表示值。若則都是數(shù)字組成,才會包含字母。

在項目中可能需要隨機生成字母數(shù)字組成的字符,如生成3-32位長度的字母數(shù)字組合的隨機字符串(位數(shù)不固定)或者生成43位隨機字符串(位數(shù)固定

使用Math.random()與toString()方法的結(jié)合

先看一下這個方式:

Math.random().toString(36);

結(jié)果:0.9kfiead48n
toString后的參數(shù)規(guī)定可以是2-36之間的任意整數(shù),不寫的話默認是10(也就是十進制),此時返回的值就是那個隨機數(shù)。

若是偶數(shù),返回的數(shù)值字符串都是短的,若是奇數(shù),則返回的將是一個很大長度的表示值。

<10 則都是數(shù)字組成,>10 才會包含字母。

所以如果想得到一長串的隨機字符,則需使用一個 > 10 且是奇數(shù)的參數(shù)。但是由于返回的是小數(shù)點,所以需要截取,可以使用slice(2) 。這兒使用substr()方法。如下:

Math.random().toString(36).substr(2);

結(jié)果:p3bz2xrzsam

但是上面的方式只是隨機了,位數(shù)不確定。怎樣來控制在一個范圍或者固定的位數(shù)呢?看下面的方法。

常規(guī)的函數(shù)寫法
/** 隨機生成固定位數(shù)或者一定范圍內(nèi)的字符串數(shù)字組合
 * @param {Number} min 范圍最小值
 * @param {Number} max 范圍最大值,當不傳遞時表示生成指定位數(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ù)寫法優(yōu)化

想想上面的arr這樣寫太繁瑣,也可以寫成字符串的形式,實現(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
擴展:從指定的字符串生成組合
/** 隨機生成固定位數(shù)或者一定范圍內(nèi)的字符串數(shù)字組合
 * @param {Number} min 范圍最小值
 * @param {Number} max 范圍最大值,當不傳遞時表示生成指定位數(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
進一步優(yōu)化,不傳遞參數(shù),默認生成指定位數(shù)的字符串組合
/** 隨機生成固定位數(shù)或者一定范圍內(nèi)的字符串數(shù)字組合
 * @param {Number} min 范圍最小值
 * @param {Number} max 范圍最大值,當不傳遞時表示生成指定位數(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碼生成組合

通過打?。?/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

常見字符對應的ASCII碼

a-z 97-122

A-Z 65-90

0-9 45-57

其實知道了這個我們就不需要寫那么長的charStr字符串

/** 隨機生成固定位數(shù)或者一定范圍內(nèi)的字符串數(shù)字組合
 * @param {Number} min 范圍最小值
 * @param {Number} max 范圍最大值,當不傳遞時表示生成指定位數(shù)的組合
 * @param {String} charStr指定的字符串中生成組合
 * @returns {String} 返回字符串結(jié)果
 * */
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();
        }
    };
    
    //根據(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/90508.html

相關(guān)文章

  • 如何編寫簡單parser(基礎(chǔ)

    摘要:在這里,詞法解析器應用的規(guī)則即為詞匯語法的定義,語法解釋器應用的規(guī)則即為表達式語句聲明和函數(shù)等的定義。如何編寫簡單的實踐篇 什么是parser? 簡單的說,parser的工作即是將代碼片段轉(zhuǎn)換成計算機可讀的數(shù)據(jù)結(jié)構(gòu)的過程。這個計算機可讀的數(shù)據(jù)結(jié)構(gòu)更專業(yè)的說法是抽象語法樹(abstract syntax tree),簡稱AST。AST是代碼片段具體語義的抽象表達,它不包含該段代碼的所有細...

    Barry_Ng 評論0 收藏0
  • 【前端】Util.js-ES6實現(xiàn)常用100多個javaScript簡短函數(shù)封裝合集(持續(xù)更新中)

    摘要:在數(shù)組中循環(huán)使用將數(shù)組的第一個元素除去直到函數(shù)的返回值為。使用匿名內(nèi)部函數(shù)范圍來聲明未定義的內(nèi)存空間使用閉包來存儲返回值。返回頂部從數(shù)組中移除給定函數(shù)返回的元素使用查找返回值的數(shù)組元素和以使用刪除元素。使用執(zhí)行從右向左的函數(shù)組合。 showImg(https://segmentfault.com/img/bV0PXR?w=400&h=80); Util.js (持續(xù)更新中...) ...

    ivyzhang 評論0 收藏0
  • 正則表達式-理論基礎(chǔ)

    摘要:正則表達式理論基礎(chǔ)篇搬運自個人博客原址正則表達式理論基礎(chǔ)篇什么是正則表達式可以稱作規(guī)則一個描述字符模式的對象,正則表達式中的字母和數(shù)字,都是按照字面含義進行匹配的。 正則表達式-理論基礎(chǔ)篇 搬運自個人博客,原址正則表達式-理論基礎(chǔ)篇 什么是正則表達式?可以稱作規(guī)則一個描述字符模式的對象,正則表達式中的字母和數(shù)字,都是按照字面含義進行匹配的。強大的字符串匹配工具 如何建立一個正則表達式...

    wanglu1209 評論0 收藏0
  • 正則表達式-理論基礎(chǔ)

    摘要:正則表達式理論基礎(chǔ)篇搬運自個人博客原址正則表達式理論基礎(chǔ)篇什么是正則表達式可以稱作規(guī)則一個描述字符模式的對象,正則表達式中的字母和數(shù)字,都是按照字面含義進行匹配的。 正則表達式-理論基礎(chǔ)篇 搬運自個人博客,原址正則表達式-理論基礎(chǔ)篇 什么是正則表達式?可以稱作規(guī)則一個描述字符模式的對象,正則表達式中的字母和數(shù)字,都是按照字面含義進行匹配的。強大的字符串匹配工具 如何建立一個正則表達式...

    vpants 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<