2013-02-06 46 views
1

晚上好,我正在學習PHP的正則表達式。我並沒有設法制造1比30和1比10的比賽。對於1比9,我認爲[1-2-3-4-5-6-7-8-9]或[1-9] {1},哪個更正確?由於事先:)簡單的PHP正則表達式

+3

'[1-9]'是正確的。要得到1到30,你需要這樣的東西:'[12]?\ d | 30' – hsan

+0

不需要{1}。 –

+0

您可能會對以下內容進行檢查:http://stackoverflow.com/questions/6560030/what-regex-can-i-use-to-validate-a-number-between-0-and-255 – Chris

回答

2

1至9,有直接的正則表達式是[1-9]
對於1到10和1到30,應用規則的組合。
對於1到10時,可以使用這樣的:

10|[1-9] 


對於1〜30,此正則表達式可用於:

(30)|([12][0-9])|([1-9]) 

(30)|([12]\d)|([1-9]) 

第一部分30,會查找完全匹配,即30.
第二個pa rt [12]\d[12][0-9],會查找10到29之間的數字。
最後一部分[1-9]會查找1-9之間的數字。

+0

如果您沒有前導零「 –

+0

」,則它將不起作用,它將匹配零,這不在1-10的範圍內。而'\ d'相當於'[0-9]'而不是'[1-9]'。 – SDC

+0

是的。更新了我的答案。 –

1

以下是一個單一的數字有效的正則表達式模式0廣告9之間:

  • []
  • [0-9]
  • \d

以上全部是當量。

您的建議版本[1-2-3-4-5-6-7-8-9]是不正確的。

要匹配1到30之間的數字,正則表達式是不是最好的工具,但如果你必須使用正則表達式,然後最簡單的正則表達式將是這樣的:

([012]?\d|30) 

但是請注意,這也將匹配0,所以它實際上是一個0-30模式。

如果你真的想要1-30,那麼它的更復雜:

([1-9]|[12]\d|30) 

如果數字1-30是整個你要找的字符串,那麼不要忘記添加^開始,並$到模式的結尾來錨定它,以便它拒絕包含1-30加上其他字符的字符串。

我確實提到過,正則表達式是匹配數字的錯誤工具,對嗎?如果你可以避免使用正則表達式,那麼對你來說會更簡單。這只是一個if($var >= 1 && $var <= 30)的情況。

希望有所幫助。

+1

沒有邊界,50000會匹配 –

+0

@EdsonMedina - 好的,但是,OP沒有說明是否是整個字符串,所以我不能給出任何界限。我只是給出了匹配他想要的字符串的那部分表達式。 – SDC

0

試試這個正則表達式:

30|[12]?\d 

它將匹配1和30之間的數字,沒有前導零