ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript で乱数と文字列を生成する
乱数または英数字文字列を生成する機能は、多くの状況で役立ちます。これを使用して、ゲーム内のさまざまな場所に敵や食べ物をスポーンできます。これを使用して、ユーザーにランダムなパスワードを提案したり、ファイルを保存するためのファイル名を作成したりすることもできます。
PHP でランダムな英数字文字列を生成する方法に関するチュートリアルを書きました。この投稿の冒頭で、真にランダムなイベントはほとんどないと述べましたが、乱数や文字列の生成にも同じことが当てはまります。
このチュートリアルでは、JavaScript で擬似ランダムな英数字文字列を生成する方法を説明します。
乱数を生成することから始めましょう。最初に思い浮かぶメソッドは Math.random()
で、これは浮動小数点の擬似乱数を返します。乱数は常に 0 以上 1 未満になります。
この範囲で返される数値の分布はほぼ均一であるため、このメソッドは日常使用において明らかな逸脱を生じることなく適切に乱数を生成できます。以下は、Math.random()
メソッドに対する 10 回の呼び出しの出力です。
リーリー
Math.random() は 0 (両端を含む) から 1 (両端を含まない) の範囲の乱数を返します。 0 (両端を含む) から 100 (両端を含まない) の範囲のランダムな整数が必要だとします。ここで行う必要があるのは、元の範囲を 100 倍することだけです。
Math.floor() メソッドを使用できるようになります。このメソッドは、値が 99.81169188071801 以下である最大の整数を切り捨てて返します。つまり、99 が得られます。
リーリー
乗算と丸めの背後にあるロジックを理解したので、最大制限内でランダムな整数を生成する関数を作成できます。リーリー
指定した最小値を超え、最大値を下回る乱数を生成したい場合はどうすればよいでしょうか?この場合、最小値を先頭に追加して、結果の数値が少なくとも最小値と等しくなるようにすることができます。その後、乱数を生成し、それを
max - min でスケールし、それを可能な限り最小の値に加算するだけです。
リーリー
Math.random() メソッドは暗号的に安全な乱数の生成には適していませんが、
Crypto.getRandomValues() メソッドはここで役に立ちます。このメソッドは、渡された配列に暗号的に安全な擬似乱数を埋めます。これらの乱数の生成に使用されるアルゴリズムはユーザー エージェントによって異なる場合があることに注意してください。
TypedArray をメソッドに渡して、メソッドにランダムな値を入力する必要があります。配列の元の内容は置き換えられます。次のコードは、10 要素の配列にランダムな整数を入力します。
リーリー
Unit8Array() コンストラクターは、10 個の 8 ビット符号なし整数の配列を提供します。配列の値はすべてゼロに初期化されます。
getRandomValues() メソッドに渡すと、乱数値は 0 ~ 255 の範囲のままになります。他のタイプの配列を使用して、さまざまな範囲の乱数を生成できます。たとえば、
Int8Array() コンストラクターを使用すると、-128 から 127 までの整数値の配列が得られます。同様に、
Uint16Array() を使用すると、最大 65,535 の整数値の配列が得られます。
リーリー
p>JavaScript でランダムな英数字文字列を生成する
コンセプトは非常にシンプルです。必要な文字をすべて含む文字列から始めます。この例では、文字列は小文字、大文字、および 0 ~ 9 の数字で構成されます。すでにご存知かもしれませんが、文字列にインデックス値を渡すことで、文字列内の特定の位置にある文字にアクセスできます。
ランダムな英数字文字列を生成するには、乱数を生成し、そのランダムなインデックスにある文字にアクセスして、それをランダムな文字列に追加するだけです。次のコード スニペットは、すべてを素敵な小さな関数にまとめています:
const char_set = 'abcdefghijlkmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; function max_random_number(max) { return Math.floor(Math.random() * max); } function get_random_string(length) { let random_string = ''; for(let i = 0; i < length; i++) { random_string += char_set[max_random_number(char_set.length - 1)]; } return random_string; } console.log(get_random_string(20)); // Outputs: lgtuRJZolu7AXj4HMoiM console.log(get_random_string(40)); // outputs: scOoal3VXgeAjaHIieolhi2TyWFpAn5bBPPiX6UG
toString()
生成随机字母数字字符串我们可以用来生成随机字母数字字符串的另一种方法是对随机生成的数字使用 toString()
方法。 toString()
方法返回一个表示我们指定数值的字符串。此方法接受可选的 radix
参数,该参数指定要表示数字的基数。值为 2 将返回二进制字符串,值为 16 将返回十六进制字符串。该参数默认值为10。最大值可以为36,因为它涵盖了全部26个字母和10个数字。
以下是针对不同 radix
值对此方法进行几次调用的输出:
let number = 3498650143868; console.log(number.toString(2)); // Outputs: 110010111010010111110011001000110001111100 console.log(number.toString(10)); // Outputs: 3498650143868 console.log(number.toString(16)); // Outputs: 32e97cc8c7c console.log(number.toString(36)); // Outputs: 18n99yoak
您可能已经注意到,随着我们增加 radix
,输出字符串的长度不断减少。在下面的代码片段中,我们将使用上一节中的 max_random_number()
函数来获取随机数。然后,我们将使用 toString()
方法将此随机数转换为字母数字字符串。
function max_random_number(max) { return Math.floor(Math.random() * max); } for(let i = 0; i < 10; i++) { console.log(max_random_number(Number.MAX_SAFE_INTEGER).toString(36)); } /* Outputs: 1tr84s6c2sl 1yj4varyoj7 1zdg9nn0z6r lubrjj1zih 13tt2n5vw9t 1mv6sctjgf yx3fhnznhf 1wj4mdcrqb9 26sir75af2r qdv9xv800t */
如果您想要更大的字母数字字符串并希望它们具有固定长度(例如 40 个字符或 100 个字符)怎么办?在这种情况下,我们可以创建一个循环,不断附加生成的字符串,直到达到所需的长度。
function max_random_number(max) { return Math.floor(Math.random() * max); } function get_random_string(length) { let random_string = ''; while(random_string.length < length) { random_string += max_random_number(Number.MAX_SAFE_INTEGER).toString(36); } return random_string.substring(0, length); } console.log(get_random_string(40)); // Outputs: bn0nfhcsjm18ylzqrm6bo1iktka2aq7qbbl5ybki console.log(get_random_string(100)); // Outputs: rdosjhthsevmk91mj9zvqexz2z0v3pe2beasbzoworanzjg3bfpf975rzfy2fmo6pmj4p69u0x80ce92jh2vljx90g6r0lzd8vb0
在本教程中,我们学习了如何在 JavaScript 中生成随机数和字母数字字符串。借助 Math.random()
方法,在 JavaScript 中生成随机整数很容易。我们所要做的就是缩放输出,使其符合我们所需的范围。如果您希望随机数具有加密安全性,您还可以考虑使用 getRandomValues()
方法。
一旦我们知道如何生成随机数,创建随机字母数字字符串就很容易了。我们需要做的就是弄清楚如何将数字转换为字符。我们在这里使用了两种方法。第一个涉及访问预定义字符串中随机数字索引处的字符。如果您想具体了解随机字母数字字符串中应包含的字符,则此技术非常有用。另一种方法涉及使用 toString()
方法将十进制数转换为不同的基数。这减少了对 max_random_number()
函数的调用。
当然还有更多技术可用于生成随机字母数字字符串。这完全取决于您的需求以及您想要的方法的创意程度。
以上がJavaScript で乱数と文字列を生成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。