我正在尝试使用正则表达式在jquery中验证用户名,并遵循以下规则
字符串必须以字母
字符串可以有0(m)到4(n)位数或不超过4(n)
字符串的大小必须介于6(p)和20(q)之间
以下应该失败
1djgWWq
(以数字开头)
wwwhg
(长度小于6)
ky12yu781
(超过4位数)
以下内容应通过
tableten
table10
tab7le10
我尝试使用正则表达式,但它在字符串
中的任何位置都不匹配4位数^(?=^[A-Za-z]+[A-Za-z0-9_-]{5,20}$)(?=^(?:(?!\d{4}).)*$).*$
注意:m,n,p,q整数变量
编辑1
Sebastian Proske>是字母数字和_ - 我想尝试使用不同的正则表达式为每个字段验证表单中的字段,因此每个字段的正则表达式,我想坚持使用一个正则表达式来获得更清晰的代码。 bellow是未经测试的示例代码,可以让您了解我正在尝试做什么。 Sebastian Proske的答案是我工作中最好的答案。谢谢大家。
Sample 1<input id="ds1" type="text" class="validate" data-validate='{"regex":"^[a-z0-9]{4,7}$"}' /><br/>
Sample 2...
Sample 3...
Active Sample <input id="as" type="text" class="validate" data-validate='{"regex":"^(?=^[A-Za-z]+[A-Za-z0-9_-]{5,20}$)(?=^(?:(?!\d{4}).)*$).*$"}' /><br/>
<input id="f1SubmitBtn" type="button" value="Test" onclick="f1Submit();" /><br/>
<script>
function f1Submit() {
$('.validate').each(function() {
if (!$(this).data('validate').regex.test(this.value)) {
console.log(this.value + " No!");
}
});
</script>
答案 0 :(得分:3)
从原始正则表达式中我假设_
和-
也是允许的字符。您可以使用正则表达式/^(?!(?:\D*\d){5})[a-z][\w-]{5,19}$/i
测试您的姓名。
稍微分解:
^
是字符串开头的锚点(?!(?:\D*\d){5})
是一个负向前瞻,检查是否存在5位数字(这会导致匹配失败)[a-z]
第一个字符必须是字母[\w-]{5,19}
长度介于6到20之间,允许使用单词字符([a-zA-Z0-9_]
)和减号$
是字符串结尾的锚点i
是不区分大小写的修饰符请参阅Regex101
答案 1 :(得分:1)
我可以用两个正则表达式完成这个(我希望),并在结果之间做and
,
第一个是
^[a-zA-A][a-zA-Z0-9]{5,19}$
使字符串以字母开头,并将长度限制为6-20
,第二个是
^[^\d]*?(\d|\d[^\d]+){0,4}$
将位数限制为0-4
我相信你想要速度正则表达式,我认为在2个正则表达式结果之间做逻辑and
也是可以接受的。
答案 2 :(得分:1)
您必须添加一些逻辑来实现您想要的行为:
<script>
function matches(str, m, n, p, q) {
var numDigits = str.replace(/[^0-9]/g, '').length;
if(m <= numDigits && numDigits <= n) {
return new RegExp('^[A-Za-z].{' + (p - 1) + ',' + (q - 1) + '}$').test(str);
} else {
return false;
}
}
var tests = ['1djgWWq', 'wwwhg', 'ky12yu781', 'tableten', 'table10','tableten'];
for(var i = 0; i < tests.length; i++) {
console.log(tests[i] + ' -> ' + matches(tests[i], 0, 4, 6, 20));
}
</script>
结果是:
1djgWWq -> false
wwwhg -> false
ky12yu781 -> false
tableten -> true
table10 -> true
tableten -> true
这里是jsfiddle:https://jsfiddle.net/z7a6fgfg/