MVC3 프로젝트에서 사용자가 URL 입력을 텍스트 입력에 입력하고이를 엔터티에 데이터로 저장할 수있는 몇 가지보기가 있습니다.데이터 입력을 확인하는 것이 유효한 URL입니다.
입력이 유효하게 형성되었는지 확인해야합니다.
http://dataannotationsextensions.org/의 [Url]
주석을 사용하여 처음 시작했지만 몇 가지 이상한 이유로 사용자가 대문자를 입력하면 클라이언트 측 유효성 검사가 실패합니다. 따라서 사용자 유형을 입력 할 때 입력을 소문자로 만드는 jQuery 이벤트를 추가했다는 점을 경감하십시오. 사용자가 tinyUrl과 같은 URL 단축 서비스에 의해 단축 된 URL에 붙여 넣을 수 있고 번역을 위해 대문자가 필요하기 때문에이 방법이 최적이 아님을 알 수 있습니다.
[RegularExpression(@"^((ht|f)tp(s?)\:\/\/|~/|/)?([\w]+:\[email protected])?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?((/?\w+/)+|/?)(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&\w+=\w+)*)?", ErrorMessage = "Please enter a valid Url")]
이 대문자를 허용하는 잘 작동합니다. 하지만 완벽하지는 않습니다. 이 정규식이 모두 유효한 것으로 간주됩니다
- www.asp
- asp.net 당신은 이들 중 일부를 볼 수 있듯이
- http://asp.net
- http://www.asp.net
- http://www.asp
진정으로 유효하지 않습니다.
이러한 URL의 가장 큰 문제점은 URL을 표시보기로 다시 표시 할 때입니다. URL 텍스트는 다음 URL과 같이 찾고 끝보기에 생성 된 링크 전에 붙여 http://
이없는 경우 :
http://www.mydomain.com/controller/action/www.asp
또는 분명히 모두 무효
http://www.mydomain.com/controller/action/asp.net
. URL이
http://
이
....
<a href="@item.Link" target="blank">@item.LinkName</a>
...
을 앞에 추가 그러나 입력 된 URL이있는 경우 http://
디스플레이 뷰에서 생성 된 URL을 앞에 추가가없는 경우
예를 들어, 면도기 코드의이 비트는 위의 두 같은 링크를 만듭니다 실제로 확실히
http://www.asp.net
http://asp.net
http://www.asp - this is actually an invalid address as well but it renders out correctly.
와 같은 실제 URL이 같은 어려운, 뷰에 DB에 저장하고 나타났다 URL을 보여주는 것이되지이며, 또한 잘 형성된 URL을 저장하는 사용자를 허용하지만, 또한 abbrevia 예 :
asp.net
www.asp.net
앞에 붙은 프로토콜을 포함하지 않아도됩니다.여기에 업데이트
당신은 내가 미쳤다고 생각하지 않는다 그래서 http://dataannotationsextensions.org/
[Required]
[StringLength(128)]
[Url(false)] // false denotes whether the protocol is required or not
public string URL { get; set; }
에서 주석을 사용하여 내 ViewModel에 내 URL 필드의 정의이며, 여기에 사용 스크린 샷입니다 대문자 및 대문자 없음 지금까지 IE8과 크롬에서 테스트와 나는 대문자와 나를 위해 http://dataannotationsextensions.org/ 작품에서 같은 결과를 완벽하게 정상적으로
5 가지 예 중 실제로 유효하지 않은 것은 어느 것입니까? 좋아, 그들은 모든 _resolve_되지 않을 수도 있습니다하지만 만약 당신이 멀리 Regex와 함께 그들을 피할 수있는 테스트를 원한다면. – Widor
1과 5는 해당 주소로 이동할 수있는 방법이 없으므로 완전히 유효하지 않습니다. 5는 URL을 만들지 만 탐색 할 수는 없습니다. 2, 3, 4는 유효하지만 3과 4 만 가능합니다 (앞에 붙인 http : //는 탐색 가능합니다. http : //가없는 것은 위의 그림과 같이 잘못된 이동 가능한 URL을 생성합니다) 컨트롤러/액션/www.asp' –