Проверка правильности выражения - PullRequest
1 голос
/ 11 января 2012

Привет, ребята. Я просмотрел много версий проверки правильности регулярного выражения, но я не могу заставить его работать, так как он разрешит только определенные буквы в начале, прежде чем вводится больше текста, поэтому, если этот текст не введен, то ничего не может введено так, как оно покажет проверку. Например я попробовал:

[Required]
[RegularExpression("^(?:[www.]|a-z|A-Z|)*$", /*This allows the www. only and nothing else*/ ErrorMessage = "Cars Only")]
public string Cars { get; set; }

и я попробовал:

[Required]
[RegularExpression("^(?:(ht|f)tp(s?))\://){1}\S+)|a-z|A-Z|)*$", /*This does not work*/
ErrorMessage = "Cars Only")]
public string Cars { get; set; }

Многие другие, но слишком много пасты станут длинными.

Может помочь, поэтому после www. можно будет ввести что-нибудь, но если не введено www., появится сообщение об ошибке.

Ответы [ 3 ]

3 голосов
/ 11 января 2012

"WWW."соответствие:

www\..* // no line start/end criteria
^www\..*$ // line start/end enforced

Вот более полное выражение, которое обрабатывает префикс:

^(https?|ftp):\/\/www\..*$

Это будет соответствовать:

http://www.test.com 
https://www.test.com 
ftp://www.test.com/test

Еще лучше, это делает префиксобязательно, но "www."необязательно:

^(https?|ftp)\:\/\/(www\.)?.*$

Это будет соответствовать:

http://www.test.com
https://www.test.com
ftp://www.test.com/test
http://test.com
https://test.com
ftp://foo.org

Соответствует только изображениям

^(https?|ftp)\:\/\/(www\.)?.*\/[\w\-\+\%]*\.(gif|jpg|jpeg|png)$

Это будет соответствовать:

ftp://foo.org/test.png
https://test.com/image.jpg
http://www.bar.com/my-image.png
http://foo.org/my%20image.jpeg
http://foo.org/my%20image%20test_foo.jpeg

Этов начале потребуется префикс, косая черта, имя файла (которое допускает буквенно-цифровые символы, подчеркивания, тире и значения в кодировке URL, содержащие% или +) и допустимое расширение изображения.

Это не будет надежно!Помните, что изображения могут подаваться из любого обработчика HTTP.URL может не иметь ничего общего с изображением.

Дополнительная информация

Я согласен с предложением @Russ Cam посмотреть на валидатор jQueryисходный код , чтобы увидеть, сколько на самом деле возможностей.

Возможно, что введенный пользователем URL-адрес находится в действительной форме, но не существует;это можно проверить на стороне сервера простым запросом.

Я рекомендую RegexBuddy , если вам часто нужно создавать регулярные выражения.

Я также рекомендую RegExr для быстрого онлайн-тестирования.

0 голосов
/ 11 января 2012

Разделите необходимые детали (т.е. сделайте www. необязательным, а затем то, что следует за ним, необязательно, но не зависит от www.

[Required]
[RegularExpression("^(?:[www.])(?:|a-z|A-Z|)*$", /*This allows the www. only and nothing else*/ ErrorMessage = "Cars Only")]
public string Cars { get; set; }
0 голосов
/ 11 января 2012

в соответствии с вашими критериями,

[Required]
[RegularExpression(@"^www\..+$", ErrorMessage = "Cars Only")]
public string Cars { get; set; }

Вы можете поиграть с этим регулярным выражением на nregex , чтобы увидеть, что соответствует, а что нет.

Я подозреваю, что вы ищете, что регулярное выражение соответствует действительному URI?Если да, я бы использовал регулярное выражение для клиентской стороны (взгляните на правило url в jQuery validate ) и создал бы атрибут Validation для серверной стороны, которая передает строкув Uri.IsWellFormedUriString(string uri, UriKind.Absolute)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...