javascript - 带或不带 http 和 www 的 URL 验证

标签 javascript asp.net regex validation

所有正则表达式都在此 js fiddle 中传递。

当我将此正则表达式移动到我的 asp.net 页面时,正则表达式验证器、#三、#七和#八被视为无效。

ASP.net:

<asp:RegularExpressionValidator ID="RegularExpressionValidator8" ControlToValidate="txtHomePage"
                                                    runat="server" CssClass="StandardText" Display="Dynamic" SetFocusOnError="true"
                                                    ErrorMessage="Invalid URL" ValidationExpression="^(?!www | www\.)[A-Za-z0-9_-]+\.+[A-Za-z0-9.\/%&=\?_:;-]+$"></asp:RegularExpressionValidator>

JavaScript 代码:

function checkUrlTest(url){

    //   /^(?:(http|https|ftp):\/\/)?(?:[\w-]+\.)+[a-z]{2,6}(\/)?/i
    //  ^(?!www | www\.)[A-Za-z0-9_-]+\.+[A-Za-z0-9.\/%&=\?_:;-]+$

    var urlregex = new RegExp("^(?!www | www\.)[A-Za-z0-9_-]+\.+[A-Za-z0-9.\/%&=\?_:;-]+$")

            return urlregex.test(url);
        }
var one = "yahoo.com";
var two = "www.yahoo.com";
var three = "http://www.yahoo.com";  //fails on .net page
var four = "yahoo.org";
var five = "somesite.org"
var six = "www.somesite.org"
var seven = "http://somesite.org"    //fails on .net page
var eight = "https://www.somesite.org"   //fails on .net page
var nine = "somesite.org?case=1"

        alert(
            one + '===> ' + checkUrlTest(one) + "\n" +
            two + '===> ' + checkUrlTest(two) + "\n" +
            three + '===> ' + checkUrlTest(three) + "\n" +
            four + '===> ' + checkUrlTest(four) + "\n" +
            five + '===> ' + checkUrlTest(five) + "\n" +
            six + '===> ' + checkUrlTest(six) + "\n" +
            seven + '===> ' + checkUrlTest(seven) + "\n" +
            eight + '===> ' + checkUrlTest(eight) + "\n" +
            nine + '===> ' + checkUrlTest(nine)
        );

这里缺少什么我找不到的东西?

最佳答案

^(www | www\.) 中的 ^ anchor 排除前面包含 https? 的行。您可以使用非捕获组和 ? 来选择性地查找这些情况:

^(?:https?://|s?ftps?://)?(?!www | www\.)[A-Za-z0-9_-]+\.+[A-Za-z0-9.\/%&=\?_:;-]+$

这将匹配除最后两行之外的所有行:

yahoo.com
www.yahoo.com
http://www.yahoo.com
yahoo.org
somesite.org
www.somesite.org
http://somesite.org
https://www.somesite.org
somesite.org?case=1

www somesite.org   // Space after 'www'
 www.example.com   // Leading space

regex101 example

关于javascript - 带或不带 http 和 www 的 URL 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25531570/

相关文章:

.net - 使用 Masterpage 在 ASP.Net 页面上进行 javascript 验证的最佳方法是什么?

c# - 将 2 个列表合并到一个新列表中,该列表包含列表 1 和列表 2 中的数据 - 其中唯一键为 "VariantId"

c# - 不是 nHibernate 标准中的关联 (Asp.Net MVC4)

sql - 在 Hive SQL 中提取两个字符之间的数字

java - 使用java的regex api插入单词be

Java正则表达式用符号替换新行

javascript - Bootstrap 让文本看起来像按钮

javascript - MVC knockout 选择标签值赋值

javascript - 将带有换行符的值导出到 Excel 中的单个单元格中。 jQuery 数据表

javascript - Position Fixed - 设置宽度等于容器