JS 正则表达式 url 验证
JS Regex url validation
我试图用或不带http来验证url 无论我做什么,函数都返回 false。我在这个网站上检查了我的正则表达式字符串:http://regexr.com/它正如我所期望的那样。
function isUrlValid(userInput) {
var regexQuery = "/(http(s)?://.)?(www'.)?[-a-zA-Z0-9@:%._'+~#=]{2,256}'.[a-z]{2,6}'b([-a-zA-Z0-9@:%_'+.~#?&//=]*)/";
var url = new RegExp(regexQuery,"g");
if (url.test(userInput)) {
alert('Great, you entered an E-Mail-address');
return true;
}
return false;
}
我通过将 .test 更改为 .match 并保留正则表达式来解决问题。
我将函数更改为匹配 + 在这里使用斜杠及其工作进行更改:(http(s)?://.)
固定功能:
function isUrlValid(userInput) {
var res = userInput.match(/(http(s)?:'/'/.)?(www'.)?[-a-zA-Z0-9@:%._'+~#=]{2,256}'.[a-z]{2,6}'b([-a-zA-Z0-9@:%_'+.~#?&//=]*)/g);
if(res == null)
return false;
else
return true;
}
我相信
另一个答案会拒绝一些有效的网址(如大写或长子域的域名)并允许一些无效的网址(如 http://www.-example-.com 或www.%@&.com)。我试图考虑一些额外的 url 语法规则(没有进入国际化)。
function isUrlValid(userInput) {
var regexQuery = "^(https?://)?(www''.)?([-a-z0-9]{1,63}''.)*?[a-z0-9][-a-z0-9]{0,61}[a-z0-9]''.[a-z]{2,6}(/[-''w@''+''.~#''?&/=%]*)?$";
var url = new RegExp(regexQuery,"i");
return url.test(userInput);
}
var input = ["https://o.sub-domain.example.com/foo/bar?foo=bar&boo=far#a%20b",
"HTTP://EX-AMPLE.COM",
"example.c",
"example-.com"];
for (var i in input) document.write(isUrlValid(input[i]) + ": " + input[i] + "<br>");
要允许 IP 地址和端口号,正则表达式为:
"^(https?://)?(((www''.)?([-a-z0-9]{1,63}''.)*?[a-z0-9][-a-z0-9]{0,61}[a-z0-9]''.[a-z]{2,6})|((''d{1,3}''.){3}''d{1,3}))(:''d{2,4})?(/[-''w@''+''.~#''?&/=%]*)?$"
为了还允许在域名和问号之间没有斜杠的查询字符串(理论上是不允许的,但在大多数现实生活中都有效),正则表达式是:
"^(https?://)?(((www''.)?([-a-z0-9]{1,63}''.)*?[a-z0-9][-a-z0-9]{0,61}[a-z0-9]''.[a-z]{2,6})|((''d{1,3}''.){3}''d{1,3}))(:''d{2,4})?((/|''?)[-''w@''+''.~#''?&/=%]*)?$"
为了确保每个 % 后跟一个十六进制数,正则表达式是:
"^(https?://)?(((www''.)?([-a-z0-9]{1,63}''.)*?[a-z0-9][-a-z0-9]{0,61}[a-z0-9]''.[a-z]{2,6})|((''d{1,3}''.){3}''d{1,3}))(:''d{2,4})?((/|''?)(((%[0-9a-f]{2})|[-''w@''+''.~#''?&/=])*))?$"
(注意:正如John Wu在评论中提到的,有有效的单字母域)。
实际上,这个问题需要一个强大的regex
,下面的代码并不难理解,请参阅下面(ES6 - TypeScript):
const isValidUrl = (url: string): boolean => {
const urlRegex = /^((http(s?)?):'/'/)?([wW]{3}'.)?[a-zA-Z0-9'-.]+'.[a-zA-Z]{2,}('.[a-zA-Z]{2,})?$/g;
const result = url.match(urlRegex);
return result !== null;
};
试试这段代码。
function CheckURL(fieldId, alertMessage) {
var url = fieldId.value;
if(url !== "")
{
if (url.match(/(http(s)?:'/'/.)?(www'.)?[-a-zA-Z0-9@:%._'+~#=]{2,256}'.[a-z]{2,6}'b([-a-zA-Z0-9@:%_'+.~#?&//=]*)/g) !== null)
return true;
else {
alert(alertMessage);
fieldId.focus();
return false;
}
}
}
var website = document.getElementById('Website');
if (!CheckURL(website, "Enter a valid website address")) {
return false;
}
相关文章:
- 在不使用任何http、https或ftp的情况下验证URL
- 使用有效的端口号和查询字符串验证URL
- 我们如何在 java 脚本中验证 URL 的链接
- 验证 URL 的长度、大写字母和某些完整单词
- 使用 jQuery 验证 URL 和域字段
- parse.com - 如何在电子邮件中生成和添加验证 URL
- javascript RegExp 验证 url 表达式
- 在 JavaScript 中验证 URL 信息
- 书签 - 验证 URL 格式并提取子字符串
- Java脚本Regex-验证URL
- Regex在GITHUB身份验证URL中屏蔽GITHUB_ACCESS_TOKEN
- 用于验证URL的Javascript正则表达式
- 验证URL(如果用户使用http:// https:// www)
- 如何验证URL中的内容(Javascript)
- 正则表达式如何验证URL
- 在javascript中验证url
- 如何验证url地址(不是语法,而是网络)
- 有没有一个明确的解决方案可以使用jQuery在没有插件的情况下验证URL
- 在javascript/jquery中验证url格式
- 使用regex验证url(可选)http:www