我有一个正则表达式,它只允许字母数字字符以及点(。)和下划线(_)
它不允许连续的下划线,但它允许连续的点。任何人都可以指导我解决这个问题。我不想要连续的点或下划线。 以下是JavaScript函数
function checkLogin() {
var login = $("#user_login").val();
var regex = new RegExp("^(?!.*__.*)[a-zA-Z0-9_.]+$");
var flag = true;
if (regex.test(login)) {
$('#valid_character_error').css("display","none");
}
else {
$('#valid_character_error').css("display","block");
flag = false;
}
return flag;
}
答案 0 :(得分:5)
只需在负前瞻中包含匹配两个点的模式。
var regex = new RegExp("^(?!.*(?:__|\\.\\.))[a-zA-Z0-9_.]+$");
[a-zA-Z0-9_.]+
将被写为[\w.]
<强>更新强>
var regex = new RegExp("^(?!.*?[._]{2})[a-zA-Z0-9_.]+$");
答案 1 :(得分:4)
这应该这样做
/^([^._]|[.](?=[^.]|$)|_(?=[^_]|$))*$/
含义:
^(...)*$
整个字符串是零或更多... [^._]
一个字符,但不是点或下划线|
或[.](?=[^.]|$)
一个点,后跟一个不同的字符或字符串的末尾(但不要&#34;使用&#34;那个字符串)|
或_(?=[^_]|$)
下划线,后跟不同的字符或字符串的结尾(但不要&#34;使用&#34;该字符串)换句话说,您正在寻找以下任一序列:
答案 2 :(得分:3)
如果您不希望{1}}或__
或..
序列出现在您的字符串中,那么此正则表达式应该有效:
._
上面的正则表达式也会拒绝以var regex = /^[a-zA-Z0-9]+([._][a-zA-Z0-9]+)*$/;
或.
开头或结尾的字符串。如果你想允许他们:
_