国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS基礎篇--通過JS生成由字母與數字組合的隨機字符串

zhangrxiang / 1936人閱讀

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

在項目中可能需要隨機生成字母數字組成的字符,如生成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? 簡單的說,parser的工作即是將代碼片段轉換成計算機可讀的數據結構的過程。這個計算機可讀的數據結構更專業的說法是抽象語法樹(abstract syntax tree),簡稱AST。AST是代碼片段具體語義的抽象表達,它不包含該段代碼的所有細...

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

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

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

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

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

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

    vpants 評論0 收藏0

發表評論

0條評論

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