|
|
@@ -7,7 +7,7 @@
|
|
|
html5Attributes: {
|
|
|
message: 'message',
|
|
|
allowlocal: 'allowLocal',
|
|
|
- customprotocol: 'customProtocol'
|
|
|
+ protocol: 'protocol'
|
|
|
},
|
|
|
|
|
|
enableByHtml5: function($field) {
|
|
|
@@ -22,7 +22,7 @@
|
|
|
* @param {Object} options
|
|
|
* - message: The error message
|
|
|
* - allowLocal: Allow the private and local network IP. Default to false
|
|
|
- * - customProtocol: User-defined protocl. Default to http/https/ftp
|
|
|
+ * - protocol: The protocols, separated by a comma. Default to "http, https, ftp"
|
|
|
* @returns {Boolean}
|
|
|
*/
|
|
|
validate: function(validator, $field, options) {
|
|
|
@@ -63,13 +63,11 @@
|
|
|
// - Added possibility of choosing a custom protocol
|
|
|
//
|
|
|
var allowLocal = options.allowLocal === true || options.allowLocal === 'true',
|
|
|
- customProtocol = options.customProtocol;
|
|
|
-
|
|
|
- if(!customProtocol || 0 === customProtocol.length){
|
|
|
- var urlExp = new RegExp(
|
|
|
+ protocol = (options.protocol || 'http, https, ftp').split(',').join('|').replace(/\s/g, ''),
|
|
|
+ urlExp = new RegExp(
|
|
|
"^" +
|
|
|
// protocol identifier
|
|
|
- "(?:(?:https?|ftp)://)" +
|
|
|
+ "(?:(?:" + protocol + ")://)" +
|
|
|
// user:pass authentication
|
|
|
"(?:\\S+(?::\\S*)?@)?" +
|
|
|
"(?:" +
|
|
|
@@ -103,48 +101,7 @@
|
|
|
// resource path
|
|
|
"(?:/[^\\s]*)?" +
|
|
|
"$", "i"
|
|
|
- );
|
|
|
- }
|
|
|
- else{
|
|
|
- var urlExp = new RegExp(
|
|
|
- "^" +
|
|
|
- // protocol identifier
|
|
|
- "(?:(?:https?|ftp|" + customProtocol + ")://)" +
|
|
|
- // user:pass authentication
|
|
|
- "(?:\\S+(?::\\S*)?@)?" +
|
|
|
- "(?:" +
|
|
|
- // IP address exclusion
|
|
|
- // private & local networks
|
|
|
- (allowLocal
|
|
|
- ? ''
|
|
|
- : ("(?!(?:10|127)(?:\\.\\d{1,3}){3})" +
|
|
|
- "(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})" +
|
|
|
- "(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})")) +
|
|
|
- // IP address dotted notation octets
|
|
|
- // excludes loopback network 0.0.0.0
|
|
|
- // excludes reserved space >= 224.0.0.0
|
|
|
- // excludes network & broadcast addresses
|
|
|
- // (first & last IP address of each class)
|
|
|
- "(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])" +
|
|
|
- "(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}" +
|
|
|
- "(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))" +
|
|
|
- "|" +
|
|
|
- // host name
|
|
|
- "(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)" +
|
|
|
- // domain name
|
|
|
- "(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*" +
|
|
|
- // TLD identifier
|
|
|
- "(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))" +
|
|
|
- // Allow intranet sites (no TLD) if `allowLocal` is true
|
|
|
- (allowLocal ? '?' : '') +
|
|
|
- ")" +
|
|
|
- // port number
|
|
|
- "(?::\\d{2,5})?" +
|
|
|
- // resource path
|
|
|
- "(?:/[^\\s]*)?" +
|
|
|
- "$", "i"
|
|
|
- );
|
|
|
- }
|
|
|
+ );
|
|
|
|
|
|
return urlExp.test(value);
|
|
|
}
|