JS中数字的正则表达式
Regular Expression in JS for numbers
我正在寻找javascript中的一个正则表达式来处理这个问题:
仅接受 6 到 15 位之间的数字,最小为 6。数字不能包含重复数字组,例如408408或123123数字不能只包含两个不同的数字,例如121212
我从这个开始,然后我失去了
^[0-9]{6,15}$
不要只使用正则表达式,而是使用 if 语句和正则表达式的组合。
function validateNumber() {
var numbers = document.getElementById('numbers1').value;
if (numbers && !isNaN(numbers)) {
// make sure a that something was entered and that it is a number
if (numbers.length < 6 || numbers.length > 15) {
// make sure number is between 6 and 15 digits
alert('Number must be between 6 and 15 digits long.');
} else if (numbers.match(/(.+)'1+/)) {
// make sure that the numbers contain no repeated digits
alert('Number cannot be repeated.');
} else {
alert('Number validated!');
// otherwise, the number is validated
}
} else {
// if no number was entered
alert('Please enter a number.');
}
}
<input type="text" placeholder="enter numbers" id="numbers1" />
<input type="button" value="Validate!" onclick="validateNumber()" />
-
您的第一条规则是正确的:
^'d{6,15}$
这既包括 6-15 的长度要求,也涵盖了它必须是数字的事实。
-
使用下一个规则,测试重复的子字符串比测试它们是否不存在更容易:
(.+)'1
-
最后一个要复杂得多。下面介绍了如何测试至少 3 个不同的字符:
(.+)(?!'1)(.+)(?!'1|'2).
-
把它们放在一起,你会得到什么:
^(?='d{6,15}$)(?!.*(.+)'1)(.+)(?!'2)(.+)(?!'2|'3).+$
这回答了你的书面问题,但正如我在评论中所说,你应该非常仔细地考虑你是否从正确的假设开始。您不必为此使用正则表达式,也不必在一个正则表达式中完成所有操作。当您在 6 个月后回来并且必须更改规则时,上述模式是否易于使用?
更重要的是,如果您试图确保用户选择强密码,您使用的规则将通过减少可能选择的数量来削弱您的安全性。最大长度为 15 个字符表示您以纯文本形式存储密码。你应该对它们进行哈希处理。
这是我的尝试,只是为了挑战:
^(?!'d*?('d+?)'1)'d{6,15}$
演示
(?!'d*?('d+?)'1)
部分将通过匹配一组数字并尝试立即匹配相同的数字来确保没有重复的数字组。如果找到一个,则匹配失败。如果要允许两个相同的连续数字,请将
(?!'d*?('d+?)'1)
替换为(?!'d*?('d{2,}?)'1)(?!('d)'2*('d)(?:'2|'3)*$)
。然后,这将通过匹配一系列一个数字,然后匹配一个不同的数字,然后是两个数字的组合系列,确保有超过 2 个不同的数字。如果它到达字符串的末尾,则会强制匹配失败。
以传统方式进行操作(没有正则表达式(可能会更易于维护。
- 正则表达式与数字中的第二个点匹配
- 正好包含2个大写字母和3个数字的正则表达式
- 键按下上的正则表达式 仅限制数字
- 使用正则表达式匹配长度为六个字符的字母数字字符串
- 为什么这个正则表达式不't匹配最后一个字母数字字符
- 正则表达式(JavaScript),用于创建数字必须大于x的数据验证
- 用于删除紧跟在非数字后面的零的正则表达式
- XXXXXX的正则表达式.XX格式的数字
- javascript正则表达式,用于匹配带数字和不带数字的字符串
- Javascript中的正则表达式,用于只有数字的字符串,并且不应在除数字以外的任何位置包含任何字符
- JavaScript正则表达式(带_-的字母数字字符)
- 用于数字输入的正则表达式
- 用Javascript正则表达式过滤十六进制数字
- 我应该使用什么正则表达式来验证数字模式
- 用于获取两个方括号之间的数字的正则表达式
- 正则表达式删除最后一个数字之后的字符串
- Javascript 正则表达式在特定单词或数字之后拆分
- 正则表达式 jquery 将数字替换为链接
- 正则表达式允许字母数字和空格,但不允许连续两个空格
- 正则表达式,字符串末尾必须包含数字