正则表达式不允许连续点或下划线

时间:2015-05-19 04:43:00

标签: javascript jquery regex

我有一个正则表达式,它只允许字母数字字符以及点(。)和下划线(_)

它不允许连续的下划线,但它允许连续的点。任何人都可以指导我解决这个问题。我不想要连续的点或下划线。 以下是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;
}

3 个答案:

答案 0 :(得分:5)

只需在负前瞻中包含匹配两个点的模式。

var regex = new RegExp("^(?!.*(?:__|\\.\\.))[a-zA-Z0-9_.]+$");

[a-zA-Z0-9_.]+将被写为[\w.]

<强>更新

var regex = new RegExp("^(?!.*?[._]{2})[a-zA-Z0-9_.]+$");

DEMO

答案 1 :(得分:4)

这应该这样做

/^([^._]|[.](?=[^.]|$)|_(?=[^_]|$))*$/

含义:

  • ^(...)*$整个字符串是零或更多...
  • [^._]一个字符,但不是点或下划线
  • |
  • [.](?=[^.]|$)一个点,后跟一个不同的字符或字符串的末尾(但不要&#34;使用&#34;那个字符串)
  • |
  • _(?=[^_]|$)下划线,后跟不同的字符或字符串的结尾(但不要&#34;使用&#34;该字符串)

换句话说,您正在寻找以下任一序列:

  • &#34;定期&#34;字符
  • 点后面没有点
  • 下划线后面没有下划线

答案 2 :(得分:3)

如果您不希望{1}}或__..序列出现在您的字符串中,那么此正则表达式应该有效:

._

上面的正则表达式也会拒绝以var regex = /^[a-zA-Z0-9]+([._][a-zA-Z0-9]+)*$/; .开头或结尾的字符串。如果你想允许他们:

_