Как мне сопоставить текст, который может содержать - или подчеркивание с использованием регулярного выражения? - PullRequest
0 голосов
/ 25 октября 2009

Я хочу, чтобы в качестве имени пользователя использовались любые символы с _ или -, но это в Perl не работает, почему?

if ("kunjaaN-" =~ /^[a-zA-Z-_]{1,7}$/)
{ print "equal" ; }

Ответы [ 2 ]

10 голосов
/ 25 октября 2009

Это не работает, потому что kunjaaN- - это восемь символов, и вы ограничиваете себя 1..7

Для имени пользователя, почему бы не увеличить лимит на что-то приличное?

Кроме того, если вы хотите, чтобы _ было включено, вам нужно включить его в свой класс персонажей.

Попробуйте это регулярное выражение:

^[a-zA-Z_-]{1,16}\z

1012 *
*

Примечание:
Внутри классов символов символ - может иметь особое значение. Например, [a-z] означает «диапазон символов, начинающийся с a и заканчивающийся z», тогда как [az-] означает «либо a, либо z, либо -».

Чтобы сделать - не специальным, вы можете поместить его в начале или в конце класса, или экранировать его обратной косой чертой. [a\-z] будет соответствовать a или z или -.
Экранирование, как правило, предпочтительнее, поскольку позволяет избежать несчастных случаев, если дополнительные символы непреднамеренно добавляются в конец класса.

4 голосов
/ 25 октября 2009

Если вы не хотите допустить возможный перевод строки в конце вашей строки, используйте \ z конец привязки строки вместо $ anchor:

 /^[a-z_-]{1,8}\z/i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...