javascript - 验证特定网址

标签 javascript regex validation

我正在为我的 friend 制作一份表格,要求所有访问者填写特定的域名。 我想要的是,他们必须编写一个以 https://specicname.com 开头的链接,并以 ID 继续。示例 https://specificname.com/id/WordOrNumber 。我需要诸如正则表达式或验证器之类的东西来验证他们在表单中填写的链接。

这是我现在使用的字符串。

case 'url':
    if ('http://' === $value) $value = '';
    if ($value && !preg_match('/^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\x{00A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}])|(%[\da-f]{2})|[!\$&\'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\x{00A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}])|(([a-z]|\d|[\x{00A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}])([a-z]|\d|-|\.|_|~|[\x{00A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}])*([a-z]|\d|[\x{00A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}])))\.)+(([a-z]|[\x{00A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}])|(([a-z]|[\x{00A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}])([a-z]|\d|-|\.|_|~|[\x{00A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}])*([a-z]|[\x{00A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\x{00A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}])|(%[\da-f]{2})|[!\$&\'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\x{00A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}])|(%[\da-f]{2})|[!\$&\'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\x{00A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}])|(%[\da-f]{2})|[!\$&\'\(\)\*\+,;=]|:|@)|[\x{E000}-\x{F8FF}]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\x{00A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}])|(%[\da-f]{2})|[!\$&\'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/iu', $value))
        return frmd_error('Please enter a valid URL.', $elm['name']);
    break;

此代码工作完美,但它会接受访问者填写的所有类型的域名。 请只用正则表达式或验证器回复,因为我不知道要编辑什么。

我不擅长编码。

最佳答案

如果你想确保输入的 URL 与特定前缀匹配,那么你可以跳过正则表达式,只测试子字符串,例如:

var validPrefix = 'https://example.com';
if (enteredUrl.substring(0, validPrefix.length) != validPrefix){
    alert('Invalid URL.');
}

如果您希望允许 URL 存在细微变化,例如有/没有 WWW 或 http 和 https,那么您可以使用一个简单的正则表达式将它们定义为可选部分。

var urlRegex = /https?:\/\/(www.)?example.com/;
if (!urlRegex.test(enteredUrl)){
    alert('Invalid URL.');
}

如果您需要验证整个 URL 格式而不仅仅是前缀,则需要根据您需要匹配的任何格式标准来扩展正则表达式。一些正则表达式教程应该可以帮助您确定如何匹配您需要的内容。例如,要在域后添加 ID 号,您可以执行以下操作:

var urlRegex = /https?:\/\/(www.)?example.com\/\d+/;
if (!urlRegex.test(enteredUrl)){
    alert('Invalid URL.');
}

关于javascript - 验证特定网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35546900/

相关文章:

java - 为什么我的 while(matcher.find()) 进入无限循环?我将它与 Streams 一起使用

javascript - 需要帮助在外部 js 文件中定义我的变量

Javascript - 更改文件夹路径,而不是文件

javascript - 在 JavaScript 中测试函数的最佳方法?

java - REGEX,删除空格和所有其他字符

regex - 匹配 HH :MM time format 的正则表达式

java - 验证消息在 Thymeleaf 中不起作用

c# - 验证 WCF 和 WebService 方法参数值的最佳方式

Facebook 页面/选项卡中的 javascript [fbjs]

php - jQuery 显示/隐藏字段未通过 php 验证