用于验证URI和/或端口的JavaScript Regular Expression

时间:2014-01-22 19:45:22

标签: javascript regex

我需要检查提供的URI是否有效,此URI可以是主机名,localhost,IP地址,带端口的主机名。

这是我目前的正则表达式:

isValidURI = function(uri){
  return new RegExp("^((cc:|https:|http:|[/][/]|www.)([a-z]|[A-Z]|[0-9]|[/.])*)$", 'g').test(uri);
}

var urls = [
  'http://localhost',
  'http://localhost.com',
  'http://www.localhost.com',
  'http://www.localhost.com:8080',
  'cc://custom.Data',
  'https://www.localhost.com',
  'https://localhost',
  'http://local host ',
  'localhost',
  'notvalid',
  'http://sjc1dsppf09.crd.ge.com:9090/service/dummydata/bar'
];  



for( var i=0; i < urls.length; i++){
  var valid = isValidURI(urls[i]);
  if(valid){
    console.log( urls[i] + ' - [isValid = ' + valid + ']') 
  } else {
    console.error( urls[i] + ' - [isValid = ' + valid + ']') 
  }
}

这是输出:

"http://localhost - [isValid = true]"
"http://localhost.com - [isValid = true]"
"http://www.localhost.com - [isValid = true]"
"http://www.localhost.com:8080 - [isValid = false]"
"cc://custom.Data - [isValid = true]"
"https://www.localhost.com - [isValid = true]"
"https://localhost - [isValid = true]"
"http://local host  - [isValid = false]"
"localhost - [isValid = false]"
"notvalid - [isValid = false]"
"http://sjc1dsppf09.crd.ge.com:9090/service/dummydata/bar - [isValid = false]"

我需要使用以下网址:端口有效,我做错了什么?

这是JSBin的链接。

http://jsbin.com/AYUpENAJ/3/edit?js,console,output

2 个答案:

答案 0 :(得分:1)

没有检查冒号:,以下通过测试

new RegExp("^((cc:|https:|http:|[/][/]|www.)([a-z]|[A-Z]|[:0-9]|[/.])*)$", 'g').test(uri);

http://jsbin.com/eJIJEWUC/1/edit

答案 1 :(得分:1)

new RegExp("^(cc|https?)://([a-zA-Z\.]*(:[0-9]*)?(?:/[a-zA-Z0-9]*)*)?$", 'g').test(uri);

如果您需要http://sjc1dsppf09.crd.ge.com:9090/service/dummydata/bar有效,请使用:

new RegExp("^(cc|https?)://([a-zA-Z0-9.](:[0-9])?(?:/[a-zA-Z0-9]))?$", 'g').test(uri);

如果您需要能够使用www。如果没有协议,则用

(?:(cc|https?):|www.)

替换第一组