如果存在超过3个字母或2个特殊字符,Regex将失败



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

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

如果Regex匹配,则验证应失败。

另外,这些都有效,但我无法正确组合它们:

/^[^x20-x7F]+$/-用于匹配美国键盘上所有字符的正则表达式

/^(w)1{3,}$/-Regex用于检测同一字符五次以上?

无效示例:

  • 他们会失败的
  • 第222次失败2次
  • !!也不允许

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

Regex引擎是AngularJS指令中的Javascript。

奖金:我也想让用户知道字符串中的失败。目前我对单个字符这样做,但不确定如何最好地输出失败的连续字符"!!is invalid":

当前工作代码段:

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.";

您正在寻找零宽度前瞻断言。

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

请注意,我对您建议的表达式进行了细微的更改,修复了其中的错误。您的第三个要求添加起来很琐碎,所以我将其作为练习留给您。

要了解这在原理上是如何工作的,请阅读我在这个线程上的回答:Regexp Java用于密码验证


附言:仔细想想"美国键盘上的所有字符"是否是一个你应该注意的规范,尤其是在网络应用程序的背景下。


额外的好处:如果你想通知用户字符串中的失败,你不能再在一个表达式中这样做了,你必须返回到根据单个规则列表进行测试。

相关内容

最新更新