如何进行服务器和客户端验证,仅在文本框中接受URL?

时间:2018-08-02 03:36:10

标签: regex asp.net-mvc validation

我想对Textbox进行客户端和服务器端验证,该验证仅应接受URL。我找不到任何具有相同功能的链接。

任何人都可以提供一些想法吗?

@Html.TextBoxFor(m => URl })

3 个答案:

答案 0 :(得分:2)

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

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

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

  

^(https?| ftp)://(((((([az] | \ d |-|。| |〜| [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEFEF ])|(%[\ 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 |-|。 |〜| [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])([az] | \ d | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF00- \ 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})| [!\ $&'()* +,; =] |:| @)| / | \?)*)?$

答案 1 :(得分:1)

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

  

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

OR

  

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

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

检查:JSFIDDLE

答案 2 :(得分:1)

您可以在模型中使用RegularExpression验证:

[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是否有其他与网址匹配的正则表达式。

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