2015-07-03 53 views
0

我想在Grails域類中存儲電話號碼。我不確定這樣做的最佳方式是什麼。作爲int存儲似乎不是一個好主意,因爲前導零是不可能的。在Grails域類中存儲phoneNumbers?

在Grails域類中存儲和驗證電話號碼的最佳方式是什麼?

回答

0

您可能最有可能使用matches約束和存儲phone numbers作爲String,因爲沒有預定義的電話號碼約束。在比賽中,你可以根據你的需要使用任何正則表達式模式。

static constraints = { 
phone(matches: "^(?:0091|\\+91|0)[7-9][0-9]{9}$") 
} 

上述正則表達式將工作,如: -

  1. 與隨之而來的是7-9
  2. 0,91或0091
  3. 起始正好9數字
  4. 必須項其次匹配整個輸入

您可以根據您的需求進行更改。

0

您可以將電話號碼存儲爲字符串。要驗證電話號碼,您可以使用谷歌手機號碼Java庫來驗證國際號碼。或者更容易的,你可以在你的代碼中使用這個grails插件:https://github.com/ataylor284/grails-phonenumbers。這是來自插件主頁的示例。

class MyDomain { 
    String phoneNumber 
    static constraints = { 
     phoneNumber(phoneNumber: true) 
    } 
} 

編輯: 爲了驗證號碼,如果它不是空白的,你必須定義延伸PhoneNumberConstraint類自定義約束類。

class CustomPhoneNumberConstraint extends PhoneNumberConstraint{ 

     @Override 
     protected void processValidate(target, propertyValue, Errors errors) { 
      //check if phone number is blank 
      if (propertyValue instanceof String && GrailsStringUtils.isBlank((String)propertyValue)) { 
         if (!blank) { 
          super.processValidate(target,propertyValue, errors) 
         } 
      } 
      return true 


     } 
} 
+0

如果我想讓phoneNumber不爲null,但可以爲空?它是否爲''phoneNumber可爲空:false,空白:true,phoneNumber:true''? –

+0

phoneNumber:true不允許空值。 –

+0

如何讓電話號碼字段爲空並驗證其是否爲空 –

0

我將存儲手機作爲String - nullableblank了。出於顯示目的,只需在grails的tablib包裝中提供您自己的標籤即可。

例如,對於一些領域類中的屬性是這樣的:

:普惠制內

class MyTagLib { 
    static defaultEncodeAs = [taglib:'html'] 

    def phone334 = { attrs -> 
     String phone = attrs.phone 
     def formatted = 
     "(".concat(phone.substring(0, 3)).concat(") ") 
      .concat(phone.substring(3, 6)).concat("-").concat(phone.substring(6)) 
     out << formatted 
    } 
} 

和使用這樣的:

String phone 

而一個標籤庫類這樣

<g:phone334 phone="${theInstance.phone}" /> 

然後如果phone = '4165557799',輸出將顯示如下:(416) 555-7799

您可以根據需要構建儘可能多的格式化程序;例如,如果您的號碼是011218213334488,並且您需要它看起來像+(218) 21 333 4488,則只需根據輸入中檢測到的長度和/或模式爲其構建格式器即可。

你也可以在那裏構建簡單的驗證器,以確保所有字符都由數字,圓括號和破折號組成,但我認爲taglibs不是正確的位置 - 執行一些過濾並根據其他帖子中的建議進行驗證,然後才能顯示哪些內容應該是正確的輸入內容。