2016-03-14 148 views
3

我想驗證表單中的電話號碼。我想檢查這樣的數字,「(」和「)」字符只是有效的。所以用戶可以填寫+31(0)600000000。表格中已經預設了+31。只有下面的代碼可以使用這個數字,只有如何添加這兩個字符?使用Symfony驗證電話號碼

還是有更好的方法來驗證電話號碼嗎?

@Assert\Length(min = 8, max = 20, minMessage = "min_lenght", maxMessage = "max_lenght") 
@Assert\Regex(pattern="/^[0-9]*$/", message="number_only") 

回答

1

您所需要的正則表達式是:

/^\(0\)[0-9]*$ 

或整個數

/^\+31\(0\)[0-9]*$ 

您可以測試在這裏玩的您正則表達式(也包括自動生成的解釋): https://www.regex101.com/r/gD0hE5/1

+0

是不是也有可能是(0 )不是必需的,但是可選的?所以(0)600000000和600000000都是有效的。 – Tom

+0

'/ ^(\(0 \))?[0-9] + $ /'將允許可選的「(0)」。你也可以通過使用'^((\ + 31)?\(0 \))'來使用'+ 31','+ 0'和' + $'。所以'+31(0)60..','(0)60..'和'60..'將會有效,而'+ 3160..'不會。 – qooplmao

+0

你也可以在'[0-9]'之後加'9'來只允許一個9個數字的字符串,比如'/ ^(\(0 \))?[0-9] {9} $ /'意思是'(0)600000000'會有效,而'(0)600000'不會。 – qooplmao

5

如果你需要一個好的ND數字,使用高級選項來valudate強大的驗證,我會建議,使用谷歌的lib https://github.com/googlei18n/libphonenumber,有存在的Symfony2束https://github.com/misd-service-development/phone-number-bundle,你可以看到有一個斷言註釋:

use Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber as AssertPhoneNumber; 

/** 
* @AssertPhoneNumber 
*/ 
private $phoneNumber; 
+0

是否可以使用此捆綁來管理複合字段?即國家前綴和數字分成兩個表單域? – mblaettermann

+0

不確定你想要如何「管理」,但你可以將字段合併到$ string並使用服務作爲「$ phoneNumber = $ container-> get('libphonenumber.phone_number_util') - > parse($ string,PhoneNumberUtil :: UNKNOWN_REGION);」 –

+0

通過管理我的意思是自動執行像Doctrine爲金錢價值對象做的合併例如 – mblaettermann