Регулярное выражение любой символ кроме пробела - PullRequest
6 голосов
/ 24 июля 2011

Я создаю валидатор пароля, который принимает любой символ, кроме пробелов и не менее чем из 6 символов.

После поиска лучшего, что я нашел, вот этот пример: Что такое регулярное выражениедля соответствия, которое не содержит пробелов между текстом?

Запрещает любые пробелы между ними, но позволяет начинать и заканчивать пробелом.Я хочу запретить пробел в переданной строке.

Я пробовал это, но это не работает:

if (preg_match("/^[^\s]+[\S+][^\s]{6}$/", $string)) {
  return true;
} else {
  return false;
}

Спасибо.

Ответы [ 5 ]

9 голосов
/ 24 июля 2011

Примерно так:

/^\S{6,}\z/

Можно процитировать как:

preg_match('/^\S{6,}\z/', $string)

Все ответы, использующие $ неправильные (по крайней мере, без каких-либофлаги).Вы должны использовать \z вместо $, если вы не хотите разрешать разрыв строки в конце строки.

  • $ соответствует концу строки или до разрыв строки в конце строки (если модификаторы не используются)
  • \z соответствует концу строки (независимо от многострочного режима)

От http://www.pcre.org/pcre.txt:

 ^           start of subject
              also after internal newline in multiline mode
 \A          start of subject
 $           end of subject
              also before newline at end of subject
              also before internal newline in multiline mode
 \Z          end of subject
              also before newline at end of subject
 \z          end of subject
9 голосов
/ 24 июля 2011

Самое простое выражение:

^\S{6,}$

^ означает начало строки
\S соответствует любому непробельному символу
{6,} означает 6 или более
$ означает конец строки

В PHP это будет выглядеть как

preg_match('/^\S{6,}$/', $string)

Edit:

>> preg_match('/^\S{6,}$/', "abcdef\n")
1
>> preg_match('/^\S{6,}\z/', "abcdef\n")
0
>> preg_match('/^\S{6,}$/D', "abcdef\n")
0

Qtax верно. Хороший звонок! Хотя, если вы берете ввод из HTML <input type="text">, у вас, вероятно, не будет новых строк.

0 голосов
/ 24 июля 2011

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

^[^\s]+$

Вы можете увидеть тест здесь: http://regexr.com? 2ua2e.

0 голосов
/ 24 июля 2011

Попробуй это.Это будет соответствовать как минимум 6 непробельным символам, за которыми следует любое количество дополнительных непробельных символов.

^[^\s]{6}[^\s]*$
0 голосов
/ 24 июля 2011

\S - Соответствует любому символу, не являющемуся пробелом. Эквивалент категории символов Юникод [^\f\n\r\t\v\x85\p{Z}]. Если ECMAScript-совместимое поведение указано с параметром ECMAScript, \S эквивалентно [^ \f\n\r\t\v].

Начало строки вы можете сделать: ^[ \t]+, а для конца: [ \t]+$ (табуляция и пробелы)

ETA:

Кстати, вы регулярно [\S+], я думаю, вы ищете: [\S]+

...