2011-11-01 1858 views
23

我想創建一個正則表達式,如果字符串模式包含空白或爲空,將返回false。到目前爲止,我有這個正則表達式不爲空而不是空白

[^\s] 

我認爲這將確保該字符串不包含空格,但我不確定如何還要檢查,以確保它不是空的。任何幫助,將不勝感激。

+3

你可以使用'str.length()== 0 || str.contains(「」)'爲此。 –

回答

35

/^$|\s+/如果匹配,則有空格或空格。

+1

+1,但'+'不是必需的。 –

+0

正確。 +不是必需的。只是不要把*放在那裏。 ;) –

+0

在某些語言(例如Ruby)中,'^'和'$'表示開始或結束行,而不是字符串。但有趣的是,即使在這種情況下,表達式也能正常工作。 – skalee

12

大多數正則表達式引擎都支持「counter part」轉義序列。也就是說,對於\s(空格),其計數器部分\S(非空格)。

使用此項,您可以檢查是否至少有一個帶有^\S+$的非空白字符。

PHPRE for PHP has several of these escape sequences

+0

正則表達式很好,但解釋有點誤導。您的正則表達式匹配一個完全由非空白字符組成的字符串,其長度至少爲一個字符。因此,它不僅僅是「檢查是否至少有一個非空白字符」。 –

+1

爲什麼downvote?正則表達式解決了OP的問題 - 如果匹配,字符串不是空的,也不包含空格。 –

+1

這是我的一個。我只是做了'str.match(/ \ S + /)' –

-1

/^[\s]*$/匹配空字符串和字符串包含空格,只有

+1

這不是什麼媒體要求。 –

+0

您可以在那裏刪除方括號。 '/^\ s * $ /'將執行相同的任務。 –

+0

@Narendra:是的,但問題是要找到*在某處包含*空格字符的字符串,而不僅僅是*由空白字符組成。 –

5

我結束了使用類似於接受的答案的東西,稍作修改

(^$)|(\s+$) 

說明由Expresso

 
Select from 2 alternatives (^$) 
    [1] A numbered captured group ^$ 
     Beginning of line^
     End of line $ 
    [2] A numbered captured group (\s+$) 
     Whitespace, one or more repetitions \s+ 
     End of line $ 
+0

您可能還想將它們標記爲非捕獲組: '(?:^ $)|(?:\ s + $)' – Chaoix

3

在我的理解是你想匹配一個非空白和非空字符串,所以最好的答案是做相反的事情。我建議:

(.|\s)*\S(.|\s)* 

- 這至少包含一個非空白字符(\S在中間)的任何字符串相匹配。它可以前後任何字符或空白序列(包括新行) - (.|\s)*

您可以在https://regex101.com/的解釋上試一下。

+0

在嘗試了所有針對此問題找到的各種不同答案之後,一個爲我工作! – friendoflore