Регулярное выражение, допускающее пробелы в строке, но не только пробелы
мне нужно написать регулярное выражение для проверки формы, которое позволяет пробелы внутри строки, но не позволяет только пробел.
например 'Chicago Heights, IL'
будет действительным, но если пользователь просто нажмет пробел любое количество раз и нажмет enter, форма не будет проверяться. Перед проверкой я попытался запустить if (foo != null)
затем запустите регулярное выражение, но нажатие пробела все еще регистрирует символы, так что это не сработало. Вот что я использую прямо сейчас, что позволяет пробелы:
^[-a-zA-Z0-9_:,.' ']{1,100}$
7 ответов
Я не уверен, что тебе нужен RegEx
здесь. Почему бы просто не назвать свой язык Trim()
метод, а затем убедитесь, что результирующая строка не пуста?
Это очень просто: .*\S.*
для этого требуется один символ без пробела в любом месте. Синтаксис регулярных выражений предназначен для Perl 5 совместимых регулярных выражений, если у вас есть другой язык, синтаксис может немного отличаться.
следующее ответит на ваш вопрос, как написано, но см. мою дополнительную заметку позже:
^(?!\s*$)[-a-zA-Z0-9_:,.' ']{1,100}$
объяснение: на (?!\s*$)
это отрицательный lookahead. Это означает: "следующие символы не могут соответствовать подшаблону \s*$
."Когда вы принимаете во внимание подзаголовок, это означает: "следующие символы не могут быть ни пустой строкой, ни строкой пробелов до конца. Следовательно, должен быть хотя бы один символ без пробелов после этой точки строки."Как только у вас есть это правило, вы можете разрешить пробелы в своем классе персонажей.
дополнительное Примечание: я не думаю, что ваш ' '
делает то, что вы хотите. Похоже, вы пытались представить символ пробела, но regex интерпретирует '
как обычный Апостроф. Внутри класса символов ' '
будет означать " соответствует любому символу, который является либо '
через пробел или '
" (обратите внимание, что второй '
символ избыточен). Я подозреваю, что то, что вы хотите, больше похоже на это:
^(?!\s*$)[-a-zA-Z0-9_:,.\s]{1,100}$
вы можете использовать простой:
^(?=.*\S).+$
если ваш движок regex поддерживает положительные lookaheads. Это выражение требует хотя бы один непробельный символ.
см. На rubular.
Если мы хотели применить проверки только с разрешенным набором символов, то я попытался с 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*
соответствует нулю, одному или нескольким пробелам между двумя словами.