繁体   English   中英

JS中的数字正则表达式

[英]Regular Expression in JS for numbers

我正在寻找可解决此问题的javascript正则表达式:

仅接受6到15位数字之间的数字,最小为6。 数字不能包含重复的数字组,例如408408或123123数字不能仅包含两个不同的数字,例如121212

我从这个开始,然后我很茫然

^[0-9]{6,15}$ 

不仅要使用Regex,还可以使用if语句和RegEx的组合。

 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*?(\d+?)\1)\d{6,15}$

演示版

  • (?!\\d*?(\\d+?)\\1)部分将通过匹配一组数字并尝试紧随其后的相同数字来确保没有重复的数字组。 如果找到一个,则匹配失败。

  • 如果要允许两个相同的连续数字,请将(?!\\d*?(\\d+?)\\1)替换为(?!\\d*?(\\d{2,}?)\\1)(?!(\\d)\\2*(\\d)(?:\\2|\\3)*$) 然后,通过匹配一系列的一个数字,然后匹配一个不同的数字,再匹配一系列的两个数字,来确保有两个以上的不同数字。 如果到达字符串的末尾,它将强制匹配失败。

但是,仅使用常规方法而不使用正则表达式可能会更易于维护。

  1. 您的第一个规则正确:

     ^\\d{6,15}$ 

    这涵盖了6-15长度的要求以及必须是数字的事实。

  2. 使用下一条规则,测试重复的子字符串比测试不存在的子字符串更容易:

     (.+)\\1 
  3. 最后一个要复杂得多。 这是您测试至少3个不同字符的方法:

     (.+)(?!\\1)(.+)(?!\\1|\\2). 
  4. 放在一起,你会得到什么:

     ^(?=\\d{6,15}$)(?!.*(.+)\\1)(.+)(?!\\2)(.+)(?!\\2|\\3).+$ 

这样可以书面形式回答您的问题,但是正如我在评论中所说,您应该非常仔细地考虑您是否从正确的假设开始。 您不必为此使用正则表达式,也不必在一个正则表达式中全部完成操作。 当您在6个月内回来并必须更改规则时,上面的模式是否很容易使用?

更重要的是,如果您要确保用户选择的密码强,则所使用的规则将通过减少可能的选择数量来削弱您的安全性。 并且最大长度为15个字符,建议您以纯文本格式存储密码。 您应该对它们进行哈希处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM