生成一个随机数字序列,然后用JavaScript在该序列后面附加一个大写字母
Generating a random numeric sequence, then appending a capital letter to that sequence in JavaScript?
我正在尝试用JavaScript编写的脚本创建唯一标识符。我对这些标识符应用的约束如下:
- 标识符的前九个字符必须是随机的数字序列。我将"数字"定义为{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}上定义了这个集合
我知道真正的随机性不是由任何编程语言来表示的。有些编程语言只是有一个模拟"随机性"的库函数,但我不认为任何语言真正实现了真正的随机性。尽管如此,让我们假设JavaScriptMath.random()函数是随机性的最佳实现。
以下是我迄今为止拥有的JavaScript代码:
// the numbers in this array represent the utf-8 codes for the uppercase letters A-Z
var uppercaseLetters = new Array(65,66,67,68,69,70,71,72,73,74,75,76,77,78,
79,80,81,82,83,84,85,86,87,88,89,90);
// http://stackoverflow.com/questions/16753876/javascript-button-to-pick-random-item-from-array
var randomElement = uppercaseLetters[Math.floor(Math.random() *
uppercaseLetters.length)];
document.write(String.fromCharCode(randomElement));
convertedElement = String.fromCharCode(randomElement);
// document.write("<br /> <br />");
// borrowed String.fromCharCode from some part of the Mozilla developer website
// you can also see the utf-8 character set on wikipedia:
// http://en.wikipedia.org/wiki/UTF-8
/* for(var index = 0; index < 26; index++) {
document.write(String.fromCharCode(uppercaseLetters[index]));
} */
document.write("<br /> <br />");
var result;
for(var count = 0; count < 9; count++) {
var randomNumber = Math.ceil((Math.random() * 10) - 1);
// var randomNumber = Math.ceil((Math.random() * 9)); may also work
document.write(randomNumber);
}
result += convertedElement;
document.write(result);
// http://stackoverflow.com/questions/1451009/javascript-infamous-loop-problem
/* function createDigitString() {
for(var count = 0; count < 9; count++) {
var randomNumber = Math.ceil((Math.random() * 10) - 1);
// var randomNumber = Math.ceil((Math.random() * 9)); may also work
document.write(randomNumber);
}
} */
这是显示它的HTML:
<!DOCTYPE html>
<html>
<head>
<base href="file:///C:/Users/sillyname/" />
<script src="random-sequence.js"></script>
</head>
<body>
</body>
</html>
这两个文件显然存储在同一个目录中。因此,这个代码应该显示一个"随机"的9位序列,跳过几行,然后显示一个随机的大写字母。现在,我想通过将字母附加到数字序列上来将两者结合起来。实现这一目标的最佳(或最简单)方法是什么?
编辑:我还应该澄清,我想分别维护这两段"随机模拟"代码。换句话说,我想将最终序列存储在一个变量中,同时保持可分性:
var finalSequence = nineRandomDigits + randomUppercaseLetter
编辑:好吧,我想我有我想要的感谢每一位贡献者。这是最终的解决方案。
function randomUppercaseLetter() {
var letter = String.fromCharCode(64 + Math.ceil(Math.random() * 26));
return letter;
}
function randomNumber(len) {
var randomNumber;
var n = '';
for(var count = 0; count < len; count++) {
randomNumber = Math.ceil((Math.random() * 10) - 1);
n += randomNumber.toString();
}
return n;
}
// Usage:
var finalSequence = randomNumber(9) + randomUppercaseLetter();
document.write(finalSequence);
这个表达式将产生所需的ID:
var id = Array.apply(0, Array(9)).map(function() {
return String.fromCharCode(48 + Math.floor(10 * Math.random()));
}).join('') + String.fromCharCode(65 + Math.floor(26 * Math.random()));
Array.apply(0, Array(9)).map()
是一个技巧(请参阅此处和此处),用于避免生成前9个数字的显式for
循环。
要稍微放松肌肉,请使用辅助功能:
function randChar(start, count) {
return String.fromCharCode(start + Math.floor(count * Math.random()));
}
function generateId() {
return Array.apply(0, Array(9)).map(function() {
return randChar(48, 10);
}).join('') + randChar(65, 26);
}
这是我提出的最后一个JavaScript解决方案,也是我选择坚持使用的解决方案。Alnitak提供了一个令人惊叹的JS答案,它也完成了同样的工作,但以一种更优雅和"神奇"的方式。如果你真的有兴趣掌握JavaScript,我建议你仔细看看他的答案。
function randomUppercaseLetter() {
var letter = String.fromCharCode(64 + Math.ceil(Math.random() * 26));
return letter;
}
function randomNumber(len) {
var randomNumber;
var n = '';
for(var count = 0; count < len; count++) {
randomNumber = Math.floor(Math.random() * 10);
n += randomNumber.toString();
}
return n;
}
// Usage:
var finalSequence = randomNumber(9) + randomUppercaseLetter();
document.write(finalSequence);
为了便于测试和澄清,使用此HTML显示结果:
<!DOCTYPE html>
<html>
<head>
<base href="file:///C:/Users/aUser/" />
<script src="random-sequence.js"></script>
</head>
<body>
</body>
</html>
我将HTML文件命名为random-sequence.HTML。HTML和JS文件都存储在同一目录中。
您可以在for之前创建一个var,并在末尾添加字母,如下所示:
var result = "";
for(var count = 0; count < 9; count++) {
var randomNumber = Math.ceil((Math.random() * 10) - 1);
result+= randomNumber;
}
result+= randomElement;
document.write(result);
编辑:工作jsfiddle
- 有没有一个函数会忽略javascript中的大写字母
- 如何使用至少一个数字、一个大写字母和6-20个字符验证密码
- Javascript正则表达式,需要一个大写字母、一个小写字母和一个数字,并允许特殊
- 编写一个包含一个大写字母和六个数字的javascript表达式
- JavaScript-删除最后一个大写字母后的所有字符
- 生成一个随机数字序列,然后用JavaScript在该序列后面附加一个大写字母
- 密码的正则表达式必须包含至少八个字符,至少一个数字以及小写和大写字母以及特殊字符
- 如何创建一个在字符串中查找大写字母并添加空格的函数
- 正则表达式至少包含 10 个字符,包括 1 个数字和一个大写字母
- 至少一个数字和一个大写字母的 JavaScript 正则表达式
- Sequelize在插入一个大写字母时返回小写字母
- 从最后一个大写字母开始剪字符串直到结尾
- 正则表达式查找至少有一个大写字母的子字符串
- 正则表达式,用于匹配九个数字和末尾的一个大写字母
- Javascript验证-只允许一个大写字母
- 匹配至少一个大写字母、至少一个数字和任意数量的特殊字符的正则表达式
- 一个大写字母的Javascript正则表达式
- Javascript 正则表达式表示“至少 X 个字符,有一个大写字母和一个数字”
- 在一个块中以所有大写字母显示字母
- Jquery或javascript密码生成器,至少有一个大写字母和一个数字