为什么正则表达式不能正确验证网站 URL?
Why does the regular expression not validate the website URL properly?
以下是我用来验证网站 URL 的 URL 表达式(正则表达式):
/(https?:\/\/)(www)?[A-Za-z0-9.\-@_~]+\.[A-Za-z]{2,}(:[0-9]{2,5})?(\/[A-Za-z0-9\/_\-.~?&=]*)*/
我的angularJS代码实现如下:
<md-input-container class="md-block" style="margin-top:20px;">
<label>Website</label>
<input ng-model="schoolDetails.website" name="website" ng-change="editField()" type="url" ng-pattern="/(https?:\/\/)(www)?[A-Za-z0-9.\-@_~]+\.[A-Za-z]{2,}(:[0-9]{2,5})?(\/[A-Za-z0-9\/_\-.~?&=]*)*/">
<div ng-messages="schoolDetailsForm.website.$error">
<div ng-message="pattern">Please enter a valid website</div>
</div>
</md-input-container>
假设我给出有效 URL http://www.bharatividyapeeth.edu
它工作正常。
如果我输入无效的 URL, http://www.
会出现错误消息,但是当我输入无效的 URL, http://www.bharatividyapeeth
时它不会显示错误消息并接受它作为有效的 URL.
有人可以更正我的代码以正确验证网站 URL 吗?
谢谢。
这对我来说似乎是正确的:
var str = 'http://www.bharatividyapeeth.in'
var reg = /(http|https)(:\/\/)+?(w{3}(\.\w*\.))+(edu|com|co\.in|in)/gi;
document.querySelector('pre').innerHTML = str.match(reg)[0];
<pre></pre>
请测试并查看此正则表达式是否适合您:
(https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})
这个将匹配以下内容:
http://www.bharatividyapeeth.edu
https://www.bharatividyapeeth.edu
www.bharatividyapeeth.edu
不匹配:
http://www.bharatividyapeeth
https://www.bharatividyapeeth
www.bharatividyapeeth
你可以在这里测试:
您的任务似乎需要更简单的 regex
。所以我只修改你的正则表达式。虽然这对大多数 URLs
有效,但在某些地方也会失败
/https?:\/\/(www\.)?(?!www\.)([A-Za-z0-9\-@_~]+\.)[A-Za-z]{2,}(:[0-9]{2,5})?(\.[A-Za-z0-9\/_\-~?&=]+)*/
以下是我用来验证网站 URL 的 URL 表达式(正则表达式):
/(https?:\/\/)(www)?[A-Za-z0-9.\-@_~]+\.[A-Za-z]{2,}(:[0-9]{2,5})?(\/[A-Za-z0-9\/_\-.~?&=]*)*/
我的angularJS代码实现如下:
<md-input-container class="md-block" style="margin-top:20px;">
<label>Website</label>
<input ng-model="schoolDetails.website" name="website" ng-change="editField()" type="url" ng-pattern="/(https?:\/\/)(www)?[A-Za-z0-9.\-@_~]+\.[A-Za-z]{2,}(:[0-9]{2,5})?(\/[A-Za-z0-9\/_\-.~?&=]*)*/">
<div ng-messages="schoolDetailsForm.website.$error">
<div ng-message="pattern">Please enter a valid website</div>
</div>
</md-input-container>
假设我给出有效 URL http://www.bharatividyapeeth.edu
它工作正常。
如果我输入无效的 URL, http://www.
会出现错误消息,但是当我输入无效的 URL, http://www.bharatividyapeeth
时它不会显示错误消息并接受它作为有效的 URL.
有人可以更正我的代码以正确验证网站 URL 吗?
谢谢。
这对我来说似乎是正确的:
var str = 'http://www.bharatividyapeeth.in'
var reg = /(http|https)(:\/\/)+?(w{3}(\.\w*\.))+(edu|com|co\.in|in)/gi;
document.querySelector('pre').innerHTML = str.match(reg)[0];
<pre></pre>
请测试并查看此正则表达式是否适合您:
(https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})
这个将匹配以下内容:
http://www.bharatividyapeeth.edu
https://www.bharatividyapeeth.edu
www.bharatividyapeeth.edu
不匹配:
http://www.bharatividyapeeth
https://www.bharatividyapeeth
www.bharatividyapeeth
你可以在这里测试:
您的任务似乎需要更简单的 regex
。所以我只修改你的正则表达式。虽然这对大多数 URLs
有效,但在某些地方也会失败
/https?:\/\/(www\.)?(?!www\.)([A-Za-z0-9\-@_~]+\.)[A-Za-z]{2,}(:[0-9]{2,5})?(\.[A-Za-z0-9\/_\-~?&=]+)*/