【问题标题】:Top level URL form validation顶级 URL 表单验证
【发布时间】:2016-03-29 17:01:23
【问题描述】:

如何仅使用 java 脚本(或 PHP)顶级 URL/域来验证或过滤? 它还必须接受新的域扩展,例如:

这是正确的: http://www.something.bid 等等……

这是不正确的: http://www.example1.com/blahblah/etc/something/index.php 等等……

还有子域 - 不允许!

它将在我的输入表单中使用 java 脚本或 PHP 进行验证。 非常感谢!

【问题讨论】:

  • 这是一个有效的“TLD”域,为什么它不正确。 http://www.example1.com/blahblah/etc/something/index.php
  • @Ibrahim 因为我不想在我的列表中接受子域或 domain.com/slash/something.html 站点,所以我只想要像“thisisfine.com”或“www”这样的完整级域。 thisisfine.com' 或 'http://thisisfine.com' 之后没有什么像 http://www.example1.com/blahblah/etc/something/index.php 或 http://www.example2.com/index .php等
  • @Ibrahim 另外,在它之前什么都没有(没有子域!)。

标签: javascript php


【解决方案1】:

好的, TLD 表示:.com.org.net 等...

子域表示:www.NAMEdev.DOMAIN_NAME等...

所以网址是[SUB_DOMAIN].domain_name.[TLD]/[Extra URL PATH|QUERY_PARAMS]

符合 www.something.bd 的条件,www 是一个子域,可能你想为 www 子域做一个例外。

使用这个正则表达式来匹配 url, /(https?:\/\/)?(([0-9a-z\_-]+)\.)?([a-z0-9\_-]+)\.([a-z]{2,})\/?(\/.+)?/

样本

var matches = 'http://www.something.bid'.match(/(https?:\/\/)?(([0-9a-z\_-]+)\.)?([a-z0-9\_-]+)\.([a-z]{2,})\/?(\/.+)?/)

结果

["http://www.something.bid", "http://", "www.", "www", "something", "bid", undefined]

matches[3] == sub-domain
matches[4] == domain
matches[5] == tld name
matches[6] == rest path

您现在可以检查子域是否为空或特定值。

function checkUrl(url){
  var regx = /(https?:\/\/)?(([0-9a-z\_-]+)\.)?([a-z0-9\_-]+)\.([a-z]{2,})\/?(.+)?/;
  var matches = url.match( regx );

  if ( matches.length == 7 
      && (!matches[3] || matches[3] == 'www') 
      && matches[4] 
      && matches[5] 
      && !matches[6] ) 
    return true;

  return false;
}


alert(checkUrl("http://something.bid/"));

alert(checkUrl("http://www.example1.com/blahblah/etc/something/index.php"));

快乐编码... :-)

【讨论】:

  • 嗯。似乎我需要替代方法,因为它不仅仅影响像“something.bid”这样的一个网址,而是所有可能的(用户必须添加他们的网址......)等等。无论如何,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
  • 2017-10-06
  • 2015-03-04
  • 1970-01-01
相关资源
最近更新 更多