【问题标题】:Regex for a string starting with http:// and containing ~以 http:// 开头并包含 ~ 的字符串的正则表达式
【发布时间】:2016-04-21 02:57:32
【问题描述】:

我正在尝试使用 javascript 中的正则表达式验证一个字符串,该字符串是用户输入到以 http:// 开头的 <form> 并在该字符串中包含 ~ somwhere 的。 我有的是

(/^(http?:\/\/)\~/.test(string))

但它并不完全有效。

有什么建议吗?

【问题讨论】:

  • If ( str.indexOf('http://') === 0 && str.indexOf('~') > 0 ) ???
  • @adeneo 谢谢你的工作!你能解释一下 indexOf 是如何工作的吗? == 和 === 有什么区别?
  • @Enigma 它为您提供给定字符串中子字符串的起始索引..
  • String.indexOf 为您提供字符串内的字符串索引。如果该索引为0,则字符串以该字符串开头。如果超过0,则包含字符串,如果是-1,则包含字符串。

标签: javascript regex validation


【解决方案1】:

不需要或RegEx,你可以使用String#startsWithString#includes

if (str.startsWith('http://') && str.includes('~')) {

由于并非所有浏览器都支持这些方法,因此您可以将 MDN 的 polyfills 用于旧版浏览器。

【讨论】:

  • 酷,效果也不错!有多种方法可以解决这个问题,这很好。
【解决方案2】:

正则表达式解决方案如下所示:

(/^https?:\/\/.*\~/.test(string))

您的正则表达式几乎是正确的,您只是缺少检查http:// 部分之后的字符的.*

我还将s? 放在那里以防https 有效

【讨论】:

  • 你为什么要逃避~
  • 老实说,我包括了逃逸,因为 OP 让它逃逸了。认为它在 JS 中可能很特别。有什么伤害吗?当我测试它时,我知道它在控制台中工作。
【解决方案3】:

我认为您的正则表达式应该修复为:

(/^(http?:\/\/).*\~/.test(string))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 2019-07-20
    • 2017-01-26
    相关资源
    最近更新 更多