2014-10-19 197 views
-3

更新 - 用例:這是用於自定義元素上的自定義「模式」類屬性。自定義屬性/訪問器採用任何正則表達式 - 我已經編寫了這部分。我需要這個特定的正則表達式供我自己使用,並且由於我只有一個屬性值(一個字符串)可以使用,並且期望一個正則表達式,所以我必須讓正則表達式執行所有必需的函數。用於檢查字符串的JS正則表達式是字符長度的數字,在最小和最大限制之間,不包括空格

更新2:外觀,如果你能想到一種方法不使用正則表達式的屬性(validate =「」),需要一個正則表達式字符串,那麼祝你好運。這是我的約束,這正是我正在處理的。這是一個有效的問題,並且有驅動的downvoters不會改變或幫助。長大,認真。

基本上,我需要一個正則表達式,它檢查字符串的長度是否符合提供的最小和最大範圍,而不計算字符串中的任何空格。例如:

var foo = ' a 1 b 2 - _ '; 

在上述可變foo,有6個非空格字符,這賦予其總數將適合的範圍爲3-6,5-7,6-10,等我需要一種統計所有這些非空間字符並檢查它們是否適合某個範圍的方法。

注意我不能接受的答案是說:「首先,從字符串替換刪除空格()」,或類似的東西 - 它必須在正則表達式可以全部完成。

+0

您可以應用'(\ S)'並計算組數 – vks 2014-10-19 04:56:12

+2

'var r ='a 1 b 2 - _'.match(/\ S/g).length' – hwnd 2014-10-19 04:57:27

+0

@hwnd - 給出上面詳述的約束條件,我不能在正則表達式之外進行操作,比如檢查一個屬性等等。它不是一個硬性綁定到範圍檢查的系統,這只是我需要的一種情況,並且必須適合約束條件。 – csuwldcat 2014-10-19 06:29:40

回答

3

如果你想要一個純粹的正則表達式的解決方案,我的建議是:

function ok(text) { 
    return text.match(/^\s*(\S\s*){3,7}$/); 
} 

分別替換3和7的最小和最大。

+0

有時候,正確的答案是「錯誤的」方法..但它確實符合OP規定的要求。 – user2864740 2014-10-19 05:08:21

+0

@ user2864740:毫無疑問,這是「長度應該是X到Y非空白字符」的錯誤方法。不過,這可能是這個問題的正確答案。我不知道OP的目的。 – Charles 2014-10-19 05:10:00

+0

我也是,但這就是爲什麼我高舉它。 – user2864740 2014-10-19 05:10:26

0

就數得過來:

var foo = ' a 1 b 2 - _ '; 
var count = foo.match(/\s[0-9a-zA-Z-_\s]/g).length; 
+0

'\ s'在這裏可能會有問題,因爲它會在'a 1 b 2 - _''上失敗;將它包含在角色類中也顯然是錯誤的。 – user2864740 2014-10-19 05:02:15

+0

'\ s *'可以解決這個問題。 – GramThanos 2014-10-19 05:07:28

0

我能簡化的擺脫\s出現,並暗示他們與空間提供了答案查爾斯:

var text = 'foo bar'; 
text.match(/^ *(\S *){3,7}$/); 
// this would validate the string is between 3 and 7 
// characters long, after trimming out spaces or line breaks 

注:我問查爾斯發佈此之前更新他的回答,我只是想以確保在未來查看問題的人看到最簡單的表達式:)

相關問題