2012-02-13 2 views
0

Я использую этот код, но он не работает правильно для - (сети) символРегулярное выражение для поля имени

^\b\w{1,}(_\.-)?\w\b$ or ^\b\w{1,}(_\.\-)?\w\b$ 

Код выше не работает, если строка выглядит так: имя-имя

то, что я хочу сделать с этим кодом является: Имени наиболее начинается с алфавитно-цифровой и так же конец, он может иметь эти символы, но только в середине

name => true 
Name_ => false 
Name_sa => true 
name._ => false 
name.-as => false 
+0

вход [имя] для комментариев и бесплатно все посетители :) вот почему :) –

ответ

4

Я думаю, что это нужно сделать, это:

^[^\W_]+([_.-][^\W_]+)?$ 

Здесь [^\W_] матчи только любые символы, кроме символов без слов и _, поэтому в основном любое слово символов кроме _. Это необходимо, так как \w содержит _.

+1

'\ w' также соответствует' _', поэтому он не будет работать. –

+0

Я уже заметил и исправил это. :) – Gumbo

+0

И '?' После '[_.-]' для совпадения слов без специального символа в середине. –

0

(_-.)должен работать. Если вы хотите, чтобы что-то вроде name.-as работало, вам нужно изменить ? на *, чтобы разрешить несколько символов посередине.

+2

Нет, он не хочет, чтобы 'name.-as' работал. Помечено как ложное в его вопросе. –

+0

@SebastianWramba Я думаю, что ты прав. Непонятно, что приведенные примеры были желательным результатом. –

1

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

  • Вы забываете, чтобы позволить несколько повторений окончательного \ ш
  • Вы только что позволяете один из этих специальных символов внутри имени

Кроме того, вместо {1,} вы также можете использовать +, что делает его более читаемым. Так что регулярное выражение должно достичь того, чего вы хотите:

/^\b\w[\w_.-]*\w\b$/

+0

Обратите внимание, что '_' является частью символьного класса' \ w', поэтому вы можете опустить его явно (и это подчеркивание будет соответствовать в начале и конце). – djd

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