ASP.Чистое количество слов с помощью пользовательского валидатора

StackOverflow https://stackoverflow.com/questions/52591

Вопрос

Требование для проекта ASP.Net 2.0, над которым я работаю, ограничивает определенное поле максимум 10 словами (не символами).В настоящее время я использую элемент управления CustomValidator со следующим методом ServerValidate:

Protected Sub TenWordsTextBoxValidator_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles TenWordsTextBoxValidator.ServerValidate
    '' 10 words
    args.IsValid = args.Value.Split(" ").Length <= 10
End Sub

Есть ли у кого-нибудь более тщательный / точный метод подсчета количества слов?

Это было полезно?

Решение 2

Это регулярное выражение, кажется, отлично работает:

"^(\b\S+\b\s*){0,10}$"

Обновить:в приведенном выше примере было несколько недостатков, поэтому в итоге я использовал это регулярное выражение:

[\s\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\xBF]+

Я split() строку в этом регулярном выражении и используйте length из результирующего массива, чтобы получить правильное количество слов.

Другие советы

Вы можете использовать один из встроенных валидаторов с регулярным выражением, которое подсчитывает слова.

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

(\b.*\b){0,10}

Я проголосовал за ответ Марена и также прокомментировал его, но поскольку комментарии по умолчанию скрыты, позвольте мне объяснить это еще раз:

Причина, по которой вы хотели бы использовать средство проверки регулярных выражений, а не пользовательский средство проверки, заключается в том, что средство проверки регулярных выражений также автоматически проверяет регулярное выражение на стороне клиента с помощью javascript, если оно доступно.Если они проходят проверку, в этом нет ничего страшного, но каждый раз, когда кто-то не проходит проверку на стороне клиента, вы избавляете свой сервер от выполнения обратной передачи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top