【发布时间】:2014-08-27 15:46:32
【问题描述】:
所有的正则表达式都传入这个js fiddle。
当我将此正则表达式移动到我的 asp.net 页面时,正则表达式验证器 #three、#seven 和 #eight 被视为无效。
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)
);
这里缺少什么我无法找到?
【问题讨论】:
-
我猜是斜线//导致了问题 :-) 我不是正则表达式专家,但我认为根据经验 .NET 使用与原生 JavaScript 不同的正则表达式
-
\ 反斜杠出现在
"引号内时需要转义。 -
您的
^正在消除https?//前缀:它在行首之后立即寻找www。见regex101.com/r/gU2mM3/1
标签: javascript asp.net regex validation