2013-08-28 39 views
3

我認爲這隻發生在我寫正則表達式時。我有一個簡單的正則表達式來驗證一組分頁號碼,以後將提交給數據庫,像5102550100250例如:Preg_match從一些數字中刪除最後的零

/all|5|10|25|50|100|250/ 

當我進行測試,我的正則表達式以上削減0僅限數字50,100和但不是從10 !!?

在線例如:
http://viper-7.com/IbKFKw

我在做什麼錯在這裏?這次我錯過了什麼?

+0

非常感謝您的正確答案,但最重要的是要有詳細的解釋和幫助學習!深深的尊重你們兩個! –

回答

10

這是因爲在字符串50中,正則表達式首先匹配5,這是有效的。在字符串250中,正則表達式首先匹配25,這是有效的並在此處結束。

你可以嘗試添加錨點:

/^(?:all|5|10|25|50|100|250)$/ 

這迫使正則表達式的整個字符串匹配,因此,返回你正在尋找正確的匹配。

+4

它的作品,傑瑞!你是對的!簡直不敢相信!你正在成爲我的個人正則表達大師!非常感謝! –

+1

@IliaRostovtsev這個名字的'傑裏'xD謝謝你,但我認爲我還有很長的路要走,成爲一個正則表達大師^^ – Jerry

+1

我修好了,對不起,傑裏! –

7

從左到右嘗試替代方案,因此匹配5優先於50。但沒有110中切斷0。你可以簡單地重新排序:

/all|250|100|50|25|10|5/ 

或者,選擇添加0到相關替代品(既然?是貪婪的,在0將如果存在匹配):

/all|50?|100?|250?/ 

/all|(?:5|10|25)0?/ 

如果這不是用於匹配,而是用於驗證(即檢查整個字符串),然後用傑裏的s uggestion和使用錨,以確保周圍有你的電話號碼不希望的字符:

/^(?:all|5|10|25|50|100|250)$/ 

(當然裏面(?:...)你也可以使用任我上面的圖案,但現在因爲不完整的比賽是不允許的優先級是無關緊要的。 )

+1

它的工作原理!你是對的!我不知道優先發生在這裏! –

相關問題