【问题标题】:Regex for not allowing consecutive dots or underscores不允许连续点或下划线的正则表达式
【发布时间】:2015-05-19 04:42:59
【问题描述】:

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

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

【问题讨论】:

  • 你想允许a._._._.x吗?

标签: javascript jquery regex


【解决方案1】:

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

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

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

更新:

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

DEMO

【讨论】:

  • 如果您不想允许a._._._.x,则将负前瞻更改为(?!.*[._]{2})
  • 您的解决方案允许使用点。我不想要超过两个连续的点或两个下划线。我也不想在我的正则表达式中允许 a._._._.x。
  • @AvinashRaj 这不适用于有效的电子邮件,例如 avinash.raj@example.com
  • @devGeek 我想说的是,只需在您的电子邮件正则表达式之前加上 ^(?!.*?[._]{2}) 。 IE。 ^(?!.*?[._]{2})<email_regex_goes_here>$
  • @AvinashRaj 如何找到填空的段落?就像我需要在word文档中一个一个找到空白,然后在下一步按钮上单击下一步填写突出显示的空白。
【解决方案2】:

应该这样做

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

意思:

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

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

  • “常规”字符
  • 点后面没有点
  • 下划线后面没有下划线

【讨论】:

    【解决方案3】:

    如果您不希望 __..._ 序列出现在您的字符串中,那么这个正则表达式应该可以工作:

    var regex = /^[a-zA-Z0-9]+([._][a-zA-Z0-9]+)*$/;
    

    上面的正则表达式也拒绝以._ 开头或结尾的字符串。如果你想允许他们:

    var regex = /^[._]?[a-zA-Z0-9]+([._][a-zA-Z0-9]+)*[._]?$/;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-17
      相关资源
      最近更新 更多