尝试验证文本字符串。规则是:
- 必须只有字母、数字、特殊(包括空格)
- 字母字符不能连续超过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用于密码验证
附言:仔细想想"美国键盘上的所有字符"是否是一个你应该注意的规范,尤其是在网络应用程序的背景下。
额外的好处:如果你想通知用户字符串中的失败,你不能再在一个表达式中这样做了,你必须返回到根据单个规则列表进行测试。