регулярное выражение не обнаруживает пробел в текстовом поле имени пользователя - PullRequest
0 голосов
/ 22 сентября 2009

У меня есть asp: текстовое поле с именем пользователя, которое является частью формы регистрации для новой учетной записи пользователя.

Очевидно, что я не хочу, чтобы пользователь регистрировался с использованием пробела в качестве имени, поэтому у меня есть это регулярное выражение, которое должно сохранять действительную запись в символы ASCII длиной от 3 до 16 без БЕЗ ПРОБЕЛ.

но без пробелов не работает на практике. это работает в редакторах и контролерах Regex, но не на моей странице aspx.

Есть предложения?

^([a-zA-Z0-9!@#$%^&*()-_=+;:'"|~`<>?/{}]{3,16})$|\s

большое спасибо

Ответы [ 4 ]

5 голосов
/ 22 сентября 2009
^([a-zA-Z0-9!@#$%^&*()-_=+;:'"|~`?/{}]{3,16})$<b>|\s</b>
                                               ↑

Ваше текущее регулярное выражение говорит: "Я сопоставляю строку, если строка состоит из этих символов и имеет длину от 3 до 16 символов ИЛИ , если она содержит символ пробела."

Итак, если вы не хотите, чтобы он совпадал с пробелами, удалите из регулярного выражения |\s (т. Е. Оператор 'или' и образец пробела).

2 голосов
/ 22 сентября 2009

Кажется, у вас проблемы с пониманием того, что пытается сказать ДТБ. Позвольте мне разобрать регулярное выражение для вас, и вы увидите, что он говорит:

^ - matches the beginning of the input string
( - begins a capture group, in your case useless and can be removed along with the closing ) just before the $
[ - begins a group of characters
a-zA-Z0-9!@#$%^&*()-_=+;:'"|~`?/{} - defines all the characters allowed, NOTICE there is no space character so spaces will not count
] - ends the group of characters
{3,16} - says that the preceding character(or group of characters in this case) must occur between 3 and 16 times
) - closes the capture group, again can be removed with the open (
$ - matches the end of the input string

Здесь твое выражение лица искажается ...

| - says that the preceeding match expression (this is the $ which is the end of input) OR the following must be true, but not necessarily both
\s - matches a space or tab anywhere in the input string

Итак (если я правильно читаю) ваше регулярное выражение утверждает:

"Я сопоставляю строку, если строка начинается с символов ascii и имеет длину от 3 до 16 символов, прежде чем она найдет либо конец строки, либо какой-либо пробел (символ табуляции или пробел)."

Чтобы исправить это, удалите '| \ s' из конца вашего выражения и просто используйте следующее:

^([a-zA-Z0-9!@#$%^&*()-_=+;:'"|~`<>?/{}]{3,16})$
0 голосов
/ 22 сентября 2009

Все еще проще

^\S{3,16}$
0 голосов
/ 22 сентября 2009

Более простой ответ будет:

^([^\s]{3,16})$

, что означает, что «вся строка должна состоять из трех-шестнадцати повторений чего-либо, кроме пробелов».

Это также позволит использовать акцентированные символы, но это, вероятно, что-то, что вы должны будете принять в любом случае.

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