为什么正则表达式不能正确验证网站URL?

时间:2016-04-01 07:09:12

标签: javascript angularjs regex url-validation

以下是我用来验证网站网址的网址表达式(正则表达式):

/(https?:\/\/)(www)?[A-Za-z0-9.\-@_~]+\.[A-Za-z]{2,}(:[0-9]{2,5})?(\/[A-Za-z0-9\/_\-.~?&=]*)*/

我的角度JS代码实现如下:

 <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>

假设我提供有效的网址http://www.bharatividyapeeth.edu,它可以正常工作。 如果我提供的网址无效,则会显示http://www.错误消息,但是当我输入无效网址时,http://www.bharatividyapeeth它不会显示错误消息并将其作为有效网址接受。< / p>

有人可以更正我的代码以正确验证网站网址吗?

感谢。

3 个答案:

答案 0 :(得分:1)

这似乎对我来说是正确的:

&#13;
&#13;
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];
&#13;
<pre></pre>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您似乎希望为您的任务提供更简单的regex。所以我只修改你的正则表达式。虽然这适用于大多数URLs但在某些地方也会失败

/https?:\/\/(www\.)?(?!www\.)([A-Za-z0-9\-@_~]+\.)[A-Za-z]{2,}(:[0-9]{2,5})?(\.[A-Za-z0-9\/_\-~?&=]+)*/

答案 2 :(得分:0)

请测试并查看此正则表达式是否适合您:

(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

你可以在这里测试:

http://regexr.com/