【发布时间】:2014-12-25 02:24:26
【问题描述】:
我正在尝试通过不显眼的验证来验证我的表单中的 IPv4 地址。所有其他验证都可以正常工作,但这个可以正常工作。
我这样定义属性模型:
[RegularExpression(ipAdressRegEx, ErrorMessageResourceName = "IPInvalid", ErrorMessageResourceType = typeof(Strings))]
public virtual String IP { get; set; }
还有我的正则表达式:
private const string ipAdressRegEx = @"/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g";
生成的HTML是这样的:
<input class="k-textbox" data-val="true" data-val-regex="Invalid IP"
data-val-regex-pattern="/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g"
id="IP" name="IP" type="text" value="">
<span class="field-validation-valid" data-valmsg-for="IP" data-valmsg-replace="true"></span>
但验证显示错误无效 IP 错误消息,例如到 ip="192.168.1.1"。
如果我在浏览器控制台中输入以下内容:
"192.168.1.1".match(/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g)
(使用传递给输入验证的模式)它返回IP,这是正确的。
我不明白为什么在这种情况下不显眼的验证不起作用...
我尝试了不同的模式...
【问题讨论】:
-
我的猜测是问题出在
/g修饰符上,我相信这是 JavaScript 特有的。可能是 ASP.NET MVC 验证使用其他方法在客户端进行匹配,而不是您正在测试的match方法。在服务器端,这个修饰符肯定不支持
标签: jquery regex asp.net-mvc-4 validation