2011-07-24 21 views
5

空白以外の6文字以上の文字を使用するパスワードバリデーターを作成しています。 正規表現の空白以外の文字

の最良を検索した後、私は思いついた、これはこの例である: What is the regular expression for matching that contains no white space in between text?

それはその間の空白を禁止するが、開始とスペースで終わることができません。私は渡された文字列内のスペースを許可しません。

私はこれを試してみましたが、それは動作しません:

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

感謝。

+2

ダム質問:ユーザーがパスワードのスペースを使用しないようにしたいのはなぜですか? – Mike

答えて

6

このような何か:

/^\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 
0

\S - 空白以外の文字と一致します。 Unicode文字カテゴリ[^\f\n\r\t\v\x85\p{Z}]に相当します。 ECMAScriptオプションにECMAScriptに準拠した動作が指定されている場合、\S[^ \f\n\r\t\v]に相当します。

を行うことができます文字列の先頭:^[ \t]+、および終了のために:[ \t]+$(タブとスペース)

ETA:ところで

、あなたは[\S+]はRegex、私はあなたが探していると思います: [\S]+

0

私はあなたがもはや空白と1文字以上の任意の文字列にマッチした、以下を使用して問題ないはずだと思う:

^[^\s]+$ 

こちらのテストはhttp://regexr.com?2ua2eです。

0

これを試してください。これは少なくとも6つの非空白文字に続いて任意の数の追加の空白でない文字と一致します。

^[^\s]{6}[^\s]*$ 
9

最も単純な式:

^\S{6,}$ 

^
\S試合
{6,}が6以上の
$は、文字列の終わりを意味を意味任意の非空白文字を文字列の先頭を意味し、

In

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

編集のようになりますPHP、:

>> 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">には改行が含まれていない可能性があります。

+1

-1、間違っている、この場合は '$'を使わないでください、私の答えを見てください。 – Qtax

関連する問題