2016-02-10 117 views
0

我已經在佈局XML定義這樣一個EditText:PhoneNumberUtils.isGlobalPhoneNumber不返回正確的結果

<EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="phone" 
     android:ems="10" 
     android:id="@+id/enter_phone_field" 
     android:layout_below="@id/enter_name_field" 
     android:layout_alignRight="@id/destination_value_label" 
     android:layout_alignEnd="@id/destination_value_label" /> 

我已經實現了OnFocusChangeListener這樣的:

enterPhoneNumber = (EditText)findViewById(R.id.enter_phone_field); 


     // phone number lost focus listener 
     enterPhoneNumber.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (!hasFocus){ 
        if (PhoneNumberUtils.isGlobalPhoneNumber(enterPhoneNumber.getText().toString())){ 
         //valid phone number detected 
         Log.i("PhoneNumberValidated", enterPhoneNumber.getText().toString()); 
        } 
        else { 
         enterPhoneNumber.setError("Please enter valid phone number"); 
        } 
       } 
      } 
     }); 

我試着在enterPhoneNumber字段中輸入34 ,當我由於某些原因而被淘汰出局時,並沒有顯示錯誤。

任何想法?

+0

你需要它是全球性的電話號碼的方法? – Stanojkovic

+0

@Stanojkovic有沒有其他的選擇?基本上我試圖驗證印度的電話號碼,可能沒有國家代碼作爲前綴的號碼,沒有國家代碼,其長度爲10位 – Devarshi

+1

這是我如何解決這個問題:String regexStr =「^ [+] [0-9 ] {11,12} $「; if(!number.matches(regexStr)){在這裏做你的東西,AlertDialog或一些警告},你只需要改變你想檢查的數字。 – Stanojkovic

回答

0

因爲「34」是由PhoneNumberUtils.isGlobalPhoneNumber的定義,全球數這反過來會檢查「34」的模式匹配:

private static final Pattern GLOBAL_PHONE_NUMBER_PATTERN = 
      Pattern.compile("[\\+]?[0-9.-]+"); 
+0

有沒有其他的選擇?基本上我試圖驗證印度的電話號碼,可能沒有國家代碼作爲前綴的號碼,沒有國家代碼,其長度是10位數字 – Devarshi