Вы хотите что-то вроде этого: ( посмотрите это в действии на rubular.com ):
^\s*\S+\s*$
Пояснение:
^
- начало якоря строки
$
- конец якоря строки
\s
- это класс символов для пробела
\S
является отрицанием \s
(обратите внимание на разницу в верхнем и нижнем регистре)
*
- это повторение «ноль или больше»
+
- это повторение "один или более"
Ссылки
Может ли текстовая часть быть пустой?
Приведенный выше шаблон НЕ соответствует, скажем, пустой строке. Исходная спецификация не очень ясна, если это предполагаемое поведение, но если разрешен пустой «текст», тогда просто используйте \S*
вместо этого, то есть соответствует zero -or-more (вместо один или больше) повтор \S
.
Таким образом, этот шаблон (такой же, как указано выше, за исключением того, что *
используется вместо +
)
^\s*\S*\s*$
будет соответствовать:
- Пустая строка (то есть строка, длина которой равна 0)
- Непустые строки, состоящие только из пробельных символов
Что считается "текстовыми" символами?
Приведенные выше шаблоны используют \S
для определения «текстовых» символов, то есть всего, кроме пробела. Это включает в себя такие вещи, как знаки препинания и символы, то есть строка " #@^$^* "
соответствует обоим шаблонам. Не ясно, является ли это желаемым поведением, то есть возможно, что " ==== AWESOMENESS ==== "
является желаемым соответствием
Шаблон все еще работает даже для этого случая, нам просто нужно быть более конкретными с нашими определениями классов символов.
Например, этот шаблон:
/^[^a-z]*[a-z]*[^a-z]*$/i
Будет соответствовать ( как видно на rubular.com ):
==== AWESOMENESS ====
Но не:
==== NOT AWESOME ====
Обратите внимание, что метасимвол ^
, используемый в качестве символа first в определении класса символов, больше не означает начало якоря строки, а скорее отрицание определения класса символов.
Обратите внимание также на использование модификатора /i
в шаблоне: это позволяет сопоставление без учета регистра. Фактический синтаксис может варьироваться в зависимости от языка / вкуса.
Ссылки