【问题标题】:How to do server and client side validation which should only accept URL in textbox?如何进行只接受文本框中的 URL 的服务器和客户端验证?
【发布时间】:2019-01-09 17:21:24
【问题描述】:

我想对只接受URL 的文本框进行客户端和服务器端验证。我找不到任何相同的链接。

谁能提供一些想法?

@Html.TextBoxFor(m => URl })

【问题讨论】:

标签: regex asp.net-mvc validation


【解决方案1】:

System.ComponentModel.DataAnnotations 中已经有一个UrlAttribute,您可以将其应用于您的属性以进行客户端和服务器端验证。

[Url] // Add optional (ErrorMessage = "...") as required
public string Url { get; set; }

在内部,它使用以下正则表达式(来自source code

^(https?|ftp)://(((([az]|\d|-|.||~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF ])|(%[\da-f]{2})|[!\$&'()*+,;=]|:)*@)?(((\d|[1-9]\d |1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d |25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1 -9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([az]|\d|[\u00A0-\uD7FF\uF900-\ uFDCF\uFDF0-\uFFEF])|(([az]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([az]|\d|-|.| em>|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([az]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF ]))).)+(([az]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([az]|[\u00A0-\uD7FF\uF900-\uFDCF\ uFDF0-\uFFEF])([az]|\d|-|.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([az]|[ \u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))).?)(:\d*)?)(/((([az]|\d|-|.|| ~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'()*+,;=]|: |@)+(/(([az]|\d|-|.||~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da -f]{2})|[!\$&'()*+,;=]|:|@)))?)?(\?((([az]|\ d|-|.||~|[\u00A0-\uD7FF\uF900-\uFDCF\ uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'()*+,;=]|:|@)|[\uE000-\uF8FF]|/| \?)*)?(#((([az]|\d|-|.||~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(% [\da-f]{2})|[!\$&'()*+,;=]|:|@)|/|\?)*)?$

【讨论】:

  • 谢谢斯蒂芬。它帮助了我。
  • 它不接受www.google.comgoogle.com。我也想实现这种类型的url。
  • @MVC,[Url] 属性基于有效的 url(包括协议 - 例如http)。如果您只想允许 google.com(我不推荐),那么您需要使用 [RegularExpression]` 属性 - this one 应该是合适的
  • 谢谢斯蒂芬。然后我会采纳你的建议。我不会像www.google.com 那样实现。我将只使用Url 属性。
【解决方案2】:

您可以在模型中使用正则表达式验证:

[StringLength(200)]
[RegularExpression(@"((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)", ErrorMessage = "Not a valid website URL")]
public string MyUrlField { get; set; }

我发现上述正则表达式可以匹配来自here 的网址。您还可以检查 this website 以获取与 url 匹配的其他正则表达式。

请注意,您需要包含jquery-validation-unobtrusive,以进行客户端验证。

【讨论】:

    【解决方案3】:

    您可以使用正则表达式进行 URL 验证。

    ^http(s)?://([\w-]+.)+[\w-]+(/[\w-./?%&=])?$

    /^http(s)?://([\w-]+.)+[\w-]+(/[\w-./?%&=])?$/

    您可以在服务器端和 Javascript 中使用此正则表达式。

    检查:JSFIDDLE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多