2013-03-19 1 views
0

Это регулярное выражение, которое у меня есть, мне нужно убедиться, что строка не начинается или не заканчивается подчеркиванием, подчеркивание может появляются между ними.Как обновить этот REGEX, чтобы убедиться, что строка не имеет _ (подчеркивание) в конце или beigning

/^[a-zA-Z0-9_.-]+$/ 

Я попытался

(?!_) 

Но не похоже на работу

Разрешенные строки:

abcd 
abcd_123 

Не допускаются строки:

abcd_ 
_abcd_123 

ответ

1

Не слишком трудно!

/^[^_].*[^_]$/ 

«Любой символ, за исключением символа подчеркивания в начале линии (^[^_]), то любые символы (.*), то любой символ, за исключением символа подчеркивания до конца строки ([^_]$).»

Для проверки строки требуется не менее двух символов. Если вы хотите, чтобы один символьные строки:

/^[^_](.*[^_]|)$/ 

«Все, кроме подчеркивания, чтобы начать линию, а затем либо некоторые символы, а также не-символ подчеркивания перед концом-линии, или просто немедленно КОНЕЦ линии.

+0

Не слишком легкий мой друг! Это не подтвердило бы ввод с длиной меньше 2. Поскольку вопрос не указывает на фактическое использование этого регулярного выражения, мы также должны принять это во внимание. –

+0

Спасибо .. Я искал выражение, которое допускает только эти символы. [A-zA-Z0-9 _.-] – RailsEnthusiast

+0

См. Мое редактирование, чтобы включить односимвольные строки. –

0
/^[a-zA-Z0-9.-][a-zA-Z0-9_.-]+[a-zA-Z0-9.-]$/ 

Попробуйте

Описание:
В первом разделе, [a-zA-Z0-9.-], регулярное выражение позволяет только верхний и нижний регистр букв, цифр, точка и дефис.
В следующем разделе, [a-zA-Z0-9_.-]+, регулярное выражение ищет один или несколько символов, которые имеют нижний или верхний регистр, цифры, дефис или символ подчеркивания.
Последняя часть, [a-zA-Z0-9.-], такая же, как и первая часть, которая ограничивает ввод символом подчеркивания.

+1

Это не подтвердило бы входы с длиной менее 3 –

+0

Есть ли способ сделать это более понятным и понятным. – RailsEnthusiast

1

Вы могли бы подойти к этому в обратном пути,

Проверьте все те, которые совпадают с началом и концом подчеркивает так:

/^_|_$/ 

^_   #starts with underscore 
|   #OR 
_$   #ends with underscore 

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

Проверил: http://www.rubular.com/r/H3Axvol13b

Или вы можете попробовать дольше регулярное выражение:

/^[a-zA-Z0-9.-][a-zA-Z0-9_.-]*[a-zA-Z0-9.-]$|^[a-zA-Z0-9.-]+$|^[a-zA-Z0-9.-][a-zA-Z0-9.-]$/ 

^[a-zA-Z0-9.-]  #starts with a-z, or A-Z, or 0-9, or . - 
[a-zA-Z0-9_.-]* #anything that can occur and the underscore 
[a-zA-Z0-9.-]$  #ends with a-z, or A-Z, or 0-9, or . - 
|     #OR 
^[a-zA-Z0-9.-]$ #for one-letter words 
|     #OR 
^[a-zA-Z0-9.-][a-zA-Z0-9.-]$  #for two letter words 

Проверил: http://www.rubular.com/r/FdtCqW6haG