2013-07-25 4 views
2

У меня есть следующее регулярное выражение:Regex для проверки длины строки буквенно-цифровой

^[a-zA-Z0-9]+([a-zA-Z0-9]+)*$ 

Я пытаюсь проверить строку между 0-10 символов, строка не может содержать более двух пробелов подряд или не может быть пустым. Строка не может содержать никаких специальных символов и может быть нечувствительной к регистру и может включать дефисы.

Как я могу ограничить ввод между 0-10 символами?

Я попытался

^[a-zA-Z0-9]+([a-zA-Z0-9]+{0,10})*$ 

, но он не работает.

+0

'if (str.Length> 10)'? – dtb

+2

Не пытайтесь делать все с помощью одного регулярного выражения ... это, скорее всего, приведет вас к стене. Для длины вы можете использовать свойство '.length', предоставляемое платформой .NET. Я бы рекомендовал использовать несколько регулярных выражений для выполнения меньших, гораздо менее сложных задач. – npinti

ответ

5

Я хотел бы сделать это следующим образом:

^(?!.* )(?=.*[\w-])[\w -]{1,10}$ 

Это использует отрицательный смотреть вперед (?!.* ) утверждать, что не два последовательных пробелов, и позитивный взгляд вперед (?=.*[\w-]) утверждать, что имеет по крайней мере один не -пространственный символ (я предполагаю, что «пустой» означает «только пробелы»).

Обратите внимание, что если он не может быть «пустым», он не может быть нулевой длиной, поэтому диапазон длины должен быть 1-10, а не 0-10.

Крошечное примечание - это то, что вам не нужно скрывать тире в классе символов, если это первый или последний символ.

+0

Отлично, спасибо – dtsg

+0

Возможно, пустая проверка может быть удалена, поскольку у нас есть обязательный полевой валидатор на элементе управления в любом случае – dtsg

+0

ОК, но вопрос действительно вызвал утверждение регулярного выражения, что было хотя бы одно не пустое. В случае, если кто-то еще придет позже, чтобы использовать этот ответ, у них может не быть этого дополнительного уровня проверки. – Bohemian

-1

Я думаю, что нет «+» при использовании диапазона.

^[a-zA-Z0-9]+([a-zA-Z0-9]{0,10})*$ 

Также вы говорите, что принимаете дефисы, но не видите здесь?

Так

^[a-zA-Z0-9]+([a-zA-Z0-9\-]{0,10})*$ 
+0

Это соответствует строке 'AAA AAA'. Ввод не может содержать более двух пробелов в строке – dtsg

1
(?i)([a-z?0-9?\-?]\s?){0,10} 

без учета регистра, между 0-10 длиной, соответствует любой комбинации букв, цифр, дефиса и пробелами.

+1

Это соответствует двойным пробелам. –

+0

Как упоминалось выше, это соответствует двойным пробелам. Почти там: '(? I) \ w ([az? 0-9? \ -?] \ S?) {0,10}' добавил '\ w' для учета акцентированных символов é, поскольку я считаю, что это разрешено – dtsg

+0

Вы уверены, что это соответствует двойному пространству, которое я тестировал в нескольких тестерах, и это не соответствует более чем одному пространству? Хотите ссылку на тестеры? – Srb1313711

Смежные вопросы