2016-01-21 95 views
2

我想匹配包含字母數字,連字符,下劃線和空格的字符串。正則表達式匹配字母數字,連字符,下劃線和空格字符串

連字符,下劃線,空格和數字是可選的,但第一個和最後一個字符必須是字母。

例如,這些都應該匹配:

abc 
abc def 
abc123 
ab_cd 
ab-cd 

我嘗試這樣做:

^[a-zA-Z0-9-_ ]+$ 

,但它與空間匹配,在開始/結束下劃線或連字符,但它應該只允許在之間。

+2

post ur attempts ... –

+0

我試過這個^ [a-zA-Z0-9-_] + $但是它在開始和結束時需要空間,下劃線和連字符,它應該允許空間在 –

+0

之間http: //堆棧溢出。com/a/34916893/5678086 – Thanga

回答

4

使用一個簡單的字符類包裹着字母字符:

^[a-zA-Z]([\w -]*[a-zA-Z])?$ 

此匹配開始,以信函,包括剛纔一個字母結尾輸入。

正則表達式中存在一個錯誤:在字符中間有一個連字符,這使得它成爲一個字符範圍。即[9-_]意味着「9_的包容性。之間的每個字符

如果你想在一個字符類文字破折號,把它放在第一個或最後一個或逃避它。

而且,喜歡使用的\w」字性格」,這是所有的字母和數字,並優先於[a-zA-Z0-9_]下劃線 - 它更容易輸入和閱讀

+0

我相信OP不想讓特殊字符在開始/結束 – anubhava

+1

@anubhava thx。修改 – Bohemian

0

你可以使用這個表達式:

^[a-zA-Z0-9]+(?:[\w -]*[a-zA-Z0-9]+)*$ 

RegEx Demo

這將只允許字母數字的開始和結束。

0

根據你的,包括空格,連字符,下劃線和字母數字字符的要求,你可以使用\w速記字符[a-zA-Z0-9_]集。 。使用轉義連字符,因爲它通常用於字符集內的字符範圍。

爲了否定空格和連字符的開始和結尾,我使用了[^\s\-]

所以完整的正則表達式變得[^\s\-][\w \-]+[^\s\-]

Here是工作演示。

+0

@Muddu Patil:我想你不想在開始或結束時使用空格,這就是爲什麼我使用'\ s'。 – 2016-01-21 07:12:12

相關問題