Ответ 1
Я не уверен, что вам нужен RegEx
здесь. Почему бы просто не называть ваш язык Trim()
, а затем гарантировать, что результирующая строка не пуста?
Мне нужно написать регулярное выражение для проверки формы, которое допускает пробелы внутри строки, но не допускает только пробел.
Например - 'Chicago Heights, IL'
будет действительным, но если пользователь просто попадет в пробел любое количество раз и нажмите Enter, форма не будет проверяться. Предваряя проверку, я попытался запустить if (foo != null)
, а затем запустить регулярное выражение, но попадание в пробел по-прежнему регистрирует символы, так что это не работает. Вот что я сейчас использую, что позволяет использовать пробелы:
^[-a-zA-Z0-9_:,.' ']{1,100}$
Я не уверен, что вам нужен RegEx
здесь. Почему бы просто не называть ваш язык Trim()
, а затем гарантировать, что результирующая строка не пуста?
Это очень просто: .*\S.*
Для этого требуется один непространственный символ в любом месте. Синтаксис регулярного выражения предназначен для регулярных выражений, совместимых с Perl 5, если у вас есть другой язык, синтаксис может немного отличаться.
Вы можете использовать простой:
^(?=.*\S).+$
если ваш двигатель regex поддерживает положительные результаты. Это выражение требует по крайней мере одного непространственного символа.
Посмотрите на rubular.
Следующее ответит на ваш вопрос, как написано, но см. мою дополнительную заметку:
^(?!\s*$)[-a-zA-Z0-9_:,.' ']{1,100}$
Объяснение: (?!\s*$)
- это негативный просмотр. Это означает: "Следующие символы не могут соответствовать подшаблону \s*$
". Когда вы принимаете подшаблон во внимание, это означает: "Следующие символы не могут быть ни пустой строкой, ни строкой пробела до конца, поэтому после этой точки в ней должен быть по крайней мере один символ без пробелов Струна." Если у вас есть это правило, вы можете разрешить пробелы в своем классе символов.
Замечание: Я не думаю, что ваш ' '
делает то, что вы намереваетесь. Похоже, вы пытались представить символ пробела, но регулярное выражение интерпретирует '
как буквальный апостроф. Внутри класса символов ' '
будет означать "соответствовать любому символу, который является либо '
, пробельным символом, либо '
" (обратите внимание, что второй символ '
является избыточным). Я подозреваю, что вам больше нравится:
^(?!\s*$)[-a-zA-Z0-9_:,.\s]{1,100}$
Если мы хотим применить проверки только с разрешенным набором символов, я попытался с помощью USERNAME_REGEX = /^(?:\s*[.\-_]*[a-zA-Z0-9]{1,}[.\-_]*\s*)$/;
., _ , -
, но строка должна иметь один буквенно-цифровой символ.Попробуйте это регулярное выражение:
^[^\s]+(\s.*)?$
Это означает один или несколько символов, которые не являются пробелами, а затем, необязательно, пробелом, за которым следует что-либо.
Просто используйте \s*
, чтобы избежать одного или нескольких пробелов в регулярном выражении между двумя словами.
Например, "Mozilla/ 4.75"
и "Mozilla/4.75"
оба могут быть сопоставлены следующим регулярным выражением:
[A-Z][a-z]*/\s*[0-9]\.[0-9]{1,2}
Добавление \s*
соответствует нулю, одно или несколько пробелов между двумя словами.