正则表达式要求不够严格

时间:2016-06-30 14:24:22

标签: javascript regex

使用正则表达式我试图将用户的输入限制为以下场景之一:

  • HTTP(S)://www.instagram.com/user
  • www.instagram.com/user
  • HTTP(S)://instagram.com/user
  • instagram.com/user

然而,一旦最后一个案例得到满足,它将接受“instagram.com”之前的任何随机字符串,这不是不可能的,但更多的是我自己的安心。我正在使用的正则表达式如下:

control.value.match(/(?:(?:http|https):\/\/)?(?:www.)?instagram.com\/([A-Za-z0-9-_]+)/igm)

我想拥有它,以便上述案例中只有一个能够验证。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

如果你把^放在你的正则表达式的开头,它将不会接受垃圾。因为^是行的开头

答案 1 :(得分:3)

如果你想确保整个内容与正则表达式匹配,有几种方法,但我最喜欢的只是使用正则表达式。

您可以使用行开头^和行结束$字符。这些被称为anchors,您可以在http://www.regular-expressions.info/anchors.html

了解它们

您的代码如下所示:

control.value.match(/^(?:(?:http|https):\/\/)?(?:www.)?instagram.com\/([A-Za-z0-9-_]+)$/igm)

这只能起作用,因为您正在查看单行文本。您的m标记意味着多行文字(使用网址没有任何意义),因此您应该仔细查看http://www.regular-expressions.info/modifiers.html。在javascript中,整个表达式的修饰符在结尾处作为标志放置。您可以在http://www.rexegg.com/regex-modifiers.html找到相关示例。

在您的示例中,您的标记为igm,并在结束/之后显示。