我想在Grails域類中存儲電話號碼。我不確定這樣做的最佳方式是什麼。作爲int存儲似乎不是一個好主意,因爲前導零是不可能的。在Grails域類中存儲phoneNumbers?
在Grails域類中存儲和驗證電話號碼的最佳方式是什麼?
我想在Grails域類中存儲電話號碼。我不確定這樣做的最佳方式是什麼。作爲int存儲似乎不是一個好主意,因爲前導零是不可能的。在Grails域類中存儲phoneNumbers?
在Grails域類中存儲和驗證電話號碼的最佳方式是什麼?
您可能最有可能使用matches
約束和存儲phone numbers
作爲String
,因爲沒有預定義的電話號碼約束。在比賽中,你可以根據你的需要使用任何正則表達式模式。
static constraints = {
phone(matches: "^(?:0091|\\+91|0)[7-9][0-9]{9}$")
}
上述正則表達式將工作,如: -
您可以根據您的需求進行更改。
您可以將電話號碼存儲爲字符串。要驗證電話號碼,您可以使用谷歌手機號碼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
}
}
我將存儲手機作爲String
- nullable
和blank
了。出於顯示目的,只需在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不是正確的位置 - 執行一些過濾並根據其他帖子中的建議進行驗證,然後才能顯示哪些內容應該是正確的輸入內容。
如果我想讓phoneNumber不爲null,但可以爲空?它是否爲''phoneNumber可爲空:false,空白:true,phoneNumber:true''? –
phoneNumber:true不允許空值。 –
如何讓電話號碼字段爲空並驗證其是否爲空 –