2016-08-13 101 views
0

構建將拒絕未修剪的輸入字符串的表達式。正則表達式 - 匹配沒有前導和尾隨空格的字符串

有一組白名單符號,包括空格。但它不能在第一個或最後一個位置使用。但是,它可以在任何數量的任何領先和修剪白名單符號之間使用。

有下列式子:

^[^\s][A-Za-z0-9\s]*[^\s]$ 

...但它不能在幾個工作原因,至少它仍然在開頭和結尾的位置上的任何非空白符號,即使它不匹配塗白上市。而且,即使與表達式匹配,也不會匹配單個字母的單詞。

白名單是A-Z,a-z,0-9,空格。

有效的情況下:

Abc132 3sdfas // everything ok 

無效的情況下,#1:

asd dsadas // leading\trailing space is exist 

無效的情況下2:

$das dsfds // not whitelisted symbol at the leading\trailing position 

那麼,如何將空白符號添加到塗白列出它是不是前導或尾隨符號?

+0

你能否使雙方的有效** **和** **無效的情況下,一些例子嗎? –

+0

試用\\ s請讓我知道如果有幫助,我有同樣的問題,這是我失蹤 – kolboc

+1

@ MaskedMan,是的,看看 – WildDev

回答

3

使用lookarounds你確信你沒有在兩端有空格:

^(?!)[A-Za-z0-9 ]*(?<!)$ 

Live demo

+1

缺少模板重複的岩石,謝謝你! – WildDev

0

嘗試在^和$之間的支架包裹它,因爲這代表了整個字符串,而不是分別任命他們開始和結束[^ \ s]的

^([^\s][A-Za-z0-9\s]*[^\s])$ 
+0

仍然是一樣的,任何非白名單的前導符號都通過匹配:( – WildDev

+0

你看過這個嗎?http://stackoverflow.com/questions/14715133/regular-expression - 沒有白色空間在開始或結束,但允許白色空間在 –

+0

是的,它會工作,但它看起來像一個解決方法 – WildDev

1

取決於你的正則表達式引擎支持一下各地

^(?=[A-Za-z0-9])([A-Za-z0-9\s]*)(?<=[A-Za-z0-9])$ 

Demo