2011-07-24 33 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

Dumb問題:爲什麼要阻止用戶在密碼中使用空格? – Mike

回答

6

事情是這樣的:

/^\S{6,}\z/ 

可援引類似:

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

使用$所有答案都是錯誤的(至少在沒有任何特殊標誌)。如果您不希望在字符串末尾出現換行符,則應該使用\z而不是$

  • $相匹配的字符串的末尾或之前在串(如果不使用改性劑)
  • \z匹配串的端部(獨立於多模式)
的端部的換行

From 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+],我認爲你是在尋找: [\S]+

0

我想你應該使用以下,這將匹配任何字符串長度超過1個字符,沒有空格被罰款:

^[^\s]+$ 

您可以在這裏看到測試:http://regexr.com?2ua2e

0

試試這個。這將匹配至少6個非空白字符,後跟任意數量的非空白字符。

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

最簡單的表達式:

^\S{6,}$ 

^意味着字符串的開始
\S匹配任何非空白字符
{6,}裝置6或多個
$表示字符串的結束

In PHP,那會是什麼樣子

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

編輯:

>> 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

相關問題