2016-08-08 151 views
1

我有這個regEx表達式,它只允許空格,字母和破折號。我想修改它,所以它不會僅允許空格。有人能幫我嗎 ?正則表達式不允許只有空格嗎?

/^([A-zăâîșțĂÂÎȘȚ-\s])+$/ 
+0

將'-'移到字符類的末尾或開頭。知道你正在使用這種語言也將有所幫助。 – chris85

+0

@ chris85謝謝 - 不知道那 – baao

+0

嗯,我懷疑這是elasticsearch,其中'-'應該只放在字符類的開頭,作爲文字符號解析,將它移動到字符的末尾上課也應該在這裏工作。 –

回答

2

可以使用負前瞻來限制這種通用模式:

/^(?!\s+$)[A-Za-zăâîșțĂÂÎȘȚ\s-]+$/ 
    ^^^^^^^^ 

regex demo

在開始的時候,才執行一次(?!\s+$)先行返回false,如果有1或更多的空格直到字符串的末尾。

而且,你的正則表達式中包含的[A-z]一個經典的問題匹配的不僅僅是ASCII字母,你需要[A-Za-z]更換這個(或只是[a-z]並使用/i不區分大小寫修改)。

此外,字符類中的-通常放在末尾以免轉義,並且它將被解析爲文字連字符(不過,如果其他開發人員需要更新,則可能需要將其解析爲字母連字符這種模式通過向角色類添加更多符號)。

和公正的情況下,這是一個正則表達式引擎不支持lookarounds:

^[A-Za-zăâîșțĂÂÎȘȚ\s-]*[A-Za-zăâîșțĂÂÎȘȚ-][A-Za-zăâîșțĂÂÎȘȚ\s-]*$ 

它需要從允許的集合(也匹配1個強制性符號)至少1個非空格字符。

Another regex demo

+0

此外,這裏的捕獲組沒有任何意義,我除去了模式周圍的'('和')',除非您真的需要最後一個字符進行進一步操作。 –

相關問題