【问题标题】:Custom Valid URL validation using regular expression in Javascript使用 Javascript 中的正则表达式自定义有效 URL 验证
【发布时间】:2017-03-23 00:18:51
【问题描述】:

这里,

我正在使用以下字符串验证 URL,它应该是 http/https 或 ip 地址以及查询字符串和不同的括号方括号 []。

我想防止下面的 url 括号

2)http://192.0.0.0/b4d2f30f-d617-403a-bb2f-dec755d01192?[publisher[client_id]Id] - 不允许

应该用什么正则表达式来防止[publisher[client_id]Id] 刺痛?

我对上面的字符串使用以下正则表达式

var regex = /(http|https):\/\/(\w+:{0,1}\w*)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%!\-\/]))?/;
        if(!regex .test(str)) {

            return false;
        } else {
            return true;
        }

相同的代码应该改变什么?

请帮助我。

【问题讨论】:

  • 您的问题并不能说明您现有的正则表达式在哪里无法发挥作用。请尝试更具体,并尝试让我们重现您的问题。
  • 是的,我想说我不想在查询字符串中允许[publisher[client_id]Id]。现在明白了吗?或需要更多解释
  • 如果您要查找的只是[publisher[client_id]Id],那么字符串的其余部分无关紧要。查找该字符串并忽略其余部分。
  • 也许正面和负面的列表(什么应该匹配,什么不应该)会有所帮助
  • @ppovoski 一切正常,但我必须添加正则表达式来防止这种情况[publisher[client_id]Id] 这应该是允许[publisher_id]

标签: javascript regex validation


【解决方案1】:

试试这个:

var strings = [
   '[publisher[client_id]Id]',
   '[publisher_id]'
];

var pattern = /\[.*\[.*\].*\]/;

strings.forEach(function(string){
   if(pattern.test(string)) {
      console.log(string + " -> matched");
   }
   else {
      console.log(string + " -> not matched");
   }
});

【讨论】:

  • publisher 和 client id 不是静态字符串,我只是想防止方括号不应该允许 [ 和 ] 方括号
  • 你没有得到我的确切问题,我不想在有效 url 中允许嵌套方括号:例如 192.0.0.0/b4d2f30f-d617-403a-bb2f-dec755d01192? [publisher[client_id]Id] 网址无效
  • @HIteshTank,再次编辑,是你要找的吗?
【解决方案2】:

试试这个。第一组返回不带参数的 url(与您的发布者等)

抱歉没有仔细阅读。试试那个,如果有效则返回 true

已编辑

var t1 = "htts:/192.0.0.0/b4d2f30f-d617-403a-bb2f-dec755d01192?[publisher[client_id]]";
var t2 = "https://192.0.0.0/b4d2f30f-d617-403a-bb2f-dec755d01192";
var t3 = "https://192.0.0 .0/b4d2f30f-d617-403a-bb2f-dec755d01192?[publisher[client_id]]";
var t4 = "https://192.0.0 .0/b4d2f30f-d617-403a-bb2f-dec755d01192?name=[publisher[client_id]]";
var t5 = "https://192.0.0 .0/b4d2f30f-d617-403a-bb2f-dec755d01192?foo=bar&name=[publisher[client_id]]";

function check(str) {
  var url = /((http[s]?:\/\/){1,1}(\w+[-.\/]{0,1}\w?)*)/g,
    p = /([\?\&](\w+=){0,1}\[\w+\[\w+\]\w*\])/g;
  /*check for url*/
  if (!url.test(str)) {
    return "invalid url";
  }
  /*check for [userid[userid]]*/
  return p.test(str) ? "invalid" : "valid";
}
document.body.innerHTML = check(t1) + "</br>";
document.body.innerHTML += check(t2) + "</br>";
document.body.innerHTML += check(t3) + "</br>";
document.body.innerHTML += check(t4) + "</br>";
document.body.innerHTML += check(t5) + "</br>";

问候

【讨论】:

  • 但是嵌套方括号如何防止它
  • [string[sting]] 嵌套方括号不应该被允许它返回 false 但仍然是 true
  • 使用运行代码更好。我再次编辑。请查看它有 2 个过滤器:1. 检查 url 是否有效 2. 检查它是否包含 [user[userid]]
  • @RizliDPrast:我已经添加了这个字符串asdsa=[publisher[client_id]id],它也不是无效的查询字符串,但根据你的表达,它允许这个而不是无效你能帮我吗?
  • 工作中,非常感谢。 @RizliDPrast
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 2012-03-29
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 2014-06-02
  • 2012-01-24
相关资源
最近更新 更多