2016-02-12 4 views
2

Прямо сейчас у меня есть регулярное выражение, которое мешает пользователю вводить специальные символы. Только допустимые символы: от A до Z, от 0 до 9 или пробелы.Regex для предотвращения пробелов и дополнительных пробелов

Я не хочу, чтобы улучшить это регулярное выражение, чтобы предотвратить следующее:

  1. без ведущего/учебных помещений - Если пользователь один или несколько пробелов до или после вступления, не позволяют.
  2. Нет двойных пробелов. Если пользователь вводит пробел более одного раза, не разрешайте.

Regex я прямо сейчас, чтобы предотвратить специальные символы следующим образом и, кажется, работает очень хорошо, что:

^[a-zA-Z0-9 ]+$ 

После некоторых других идей, я попытался все эти варианты, но они не сделали работы:

^\A\s+[a-zA-Z0-9 ]+$\A\s+ 
/s*^[a-zA-Z0-9 ]+$/s* 

Могу ли я получить руку помощи с помощью этого кода? Опять же, мне просто нужны буквы A-Z, цифры 0-9, а не начальные или конечные пробелы.

Спасибо.

+0

Как '^ (?!. * {2}) (? = \ S. * \ S $) [a-zA-Z0-9] + $'? Это C#? –

+0

Какой язык программирования? –

ответ

2

Вы можете использовать следующее регулярное выражение:

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

См regex demo.

Регулярное выражение будет соответствовать буквенно-цифровым символам в начале (1 или больше), а затем ноль или более фрагментов одного пробела, за которым следует одна или несколько буквенно-цифровых символов.

В качестве альтернативы, здесь регулярное выражение основано на lookaheads (но при этом менее эффективен):

^(?!.* {2})(?=\S)(?=.*\S$)[a-zA-Z0-9 ]+$ 

Смотрите regex demo

(?!.* {2}) не разрешает последовательных пробелов и (?=.*\S$) требует непробельных к быть в конце строки, и (?=\S) требует его в начале.

+0

Ницца. Хотя альтернативный не поймает действительные строки с 1 символом. –

+0

Я исправил его, ваш тоже очень хорош. –

+0

Работал как шарм. Большое спасибо! – Bill

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