如果存在超过3个alpha或2个特殊字符,则regex会失败

时间:2014-10-03 18:05:05

标签: javascript regex

尝试验证一串文字。规则是:

  • 必须只有字母,数字,特殊(包括空格)
  • 连续不能超过3个字母
  • 连续不能超过2个特殊字符

如果正则表达式匹配,则验证失败。

另外,这些工作,但我无法正确组合它们:

/^[^\x20-\x7F]+$/ - Regular expression to match all characters on a U.S. keyboard

/^(\w)\1{3,}$/ - Regex for detecting the same character more than five times?

无效示例:

  • Thiiis会失败。
  • Thiiis将会失败2次。
  • !!也不允许。

用例不允许用户弄脏市场上的帖子(想想Craigslist)。

正则表达式引擎是AngularJS指令中的Javascript。

奖励:我还想让用户知道字符串中的失败。目前我正在为单个角色做这个,但不知道如何最好地输出失败的连续角色" !!无效":

当前工作代码段:

var alphaNumeric = /^[^0-9a-zA-Z\- ]+$/;
var charArray = new Array();
for (var i = 0; i < userstring.length; i++) {
    if (alphaNumeric.test(userstring[i])) {
        charArray.push(userstring[i]);
    }
}
var errorMsg = charArray.join().toString() + " are invalid characters.";

1 个答案:

答案 0 :(得分:1)

您正在寻找zero-width look-ahead assertions

(?=^[\x20-\x7F]+$)(?!^.*?(\w)\1{2,}$).*

请注意我对您建议的表达式所做的细微更改,修复其中的错误。你的第三个要求是微不足道的,所以我把它作为练习留给你。

要了解原理如何运作,请仔细阅读我在此主题的答案:Regexp Java for password validation


P.S。:认真思考“美国键盘上的所有字符”是否应该引起注意,尤其是在网络应用程序环境中。


奖励:如果您想通知用户字符串中的失败,则不能再在单个表达式中执行此操作,您必须返回针对单个规则列表进行测试。