2014-01-14 43 views
2

我想允許以下模式:任何數字或兩個數字之間的連字符,所以基本上是一個房子號碼。什麼是更好的正則表達式/正則表達式比測試房屋號碼的模式更好?

到目前爲止是這種情況,但似乎有點怪我:/^(\d)+$|^([\d]+-[\d]+)$/g

這正確valids "1", "12", "12-13"和unvalids "-2「和"12-"

+2

當心'\ D',因爲這你的期望也許不會那麼做!它可能代表任何數字字符,而不僅僅是阿拉伯語(1,2,3,...)。請參閱http://stackoverflow.com/questions/6479423/does-d-in-regex-mean-a-digit –

+0

我的門牌號碼是56b。你不會爲我贏得比賽。 – Spudley

+0

是的,我會的,我們有一個單獨的領域:)你會有場外號碼和額外的地址 – Alex

回答

2

如何以下

/^\d+(-\d+)?$/ 
  • 你不?不需要指定g標誌。
  • ?使得以下-\d+部分可選。

例子:

/^\d+(-\d+)?$/.test('1')  // true 
/^\d+(-\d+)?$/.test('12') // true 
/^\d+(-\d+)?$/.test('12-13') // true 
/^\d+(-\d+)?$/.test('-13') // false 
/^\d+(-\d+)?$/.test('13-') // false 
+0

非常感謝。我現在呢?但並沒有把它變成一個工作表達式。將在計時器過期後立即接受;) – Alex

+0

嘗試用[0-9]替換\ d。將工作完全相同,除了只匹配數字0到9,因爲\ d將匹配數字,但也包括其他數字字符,如東阿拉伯數字。 – Srb1313711

+0

這裏不是非捕獲組織嗎? '/^\ d +( - ?\ d +)?$ /'? – thefourtheye

相關問題