Grails+台灣電話號碼的contraint

在Grails的Domain Object設定中,可以透過constraints的設定來讓檢查使用者輸入的文字,本篇是想針對台灣的電話號碼寫一個contraint。

在domain object上面想要應用正規表示式(Regular Expression)的寫法如下

static constraints = {
contactPhone(matches: “電話的正規表示式")
}

台灣的電話號碼大多分為下面幾種

市話

  • 格式為區碼+電話號碼
  • 區碼為2-3碼
  • 開頭是0
  • 電話號碼則為6到8碼
  • 可能有分機(1~5碼)

如此一來正規表示式可以寫成 0\d{1,2}(\d{6,8})
如果接受使用可以輸入"-“來分隔區碼的話,可以寫成0\d{1,2}-?(\d{6,8}),其中問號代表"-“可有可無。

如果需要分機,假設最多分機為5碼,且可有可無,可以寫成 0\d{1,2}-?(\d{6,8})(#\d{1,5}){0,1}

手機

  • 10碼
  • 09開頭
其正規表示式可以寫成09\d{2}-?(\d{3})-?(\d{3})

如果還做成mask的方式讓使用者清楚如何輸入,例如(_ _ _)_ _ _ _ – _ _ _ _(#_ _ _ _ _)
可以參考jquesy的plugin http://www.slideshare.net/Marcelocajueiro/mask-validator-gem-with-tricks