2014-02-07 38 views
2

我正在驗證名稱字段,因爲有很多國家使用不同的符號作爲名字,我將通過檢查字段是否存在來驗證字段人物如何排除android reg表達式中的數字號碼

private static final String NAME_REGEX = "\\d*"; 

public static boolean isName(EditText editText) { 
     return isValid(editText, NAME_REGEX) ? false : true; //Match digit pattern return true , meaning it is not a valid name 
    } 

public static boolean isValid(EditText editText, String regex) { 
    String text = editText.getText().toString().trim(); 
    return Pattern.matches(regex, text) ? true : false; 
} 

然而之間的數字,這個模式似乎不工作,我添加一些號碼仍然有效,什麼是實現這一正確的方法是什麼?非常感謝

+1

強制性:http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ – nhahtdh

+0

你應該使用輸入過濾 –

+0

感謝您的信息。我想知道任何人使用這個數字(這是禁止的?)作爲他們的名字嗎? – user782104

回答

1

請勿使用regx。 InputFilter是進行這種驗證的正確方法。

public class MainActivity extends Activity { 

    EditText edit; 

    InputFilter filter = new InputFilter() { 

     @Override 
     public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 

      if (source.length() > 0) { 
       if (Character.isDigit(source.charAt(0))) 
        return ""; 
      } 
      return null; 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     edit = (EditText) findViewById(R.id.edit); 
     edit.setFilters(new InputFilter[] { filter }); 
    } 

} 
+0

你好,你有沒有嘗試過的解決方案或不 –

+0

是的,我同時使用android:singleLine =「true」和輸入過濾器,因爲我也需要防止用戶插入新行,謝謝 – user782104

2

只是這樣做

private static final String NAME_REGEX = ".*\\d."; 

我認爲這會工作。

1

如果將EditText設置爲inputType爲「textPersonName」,則不需要驗證。

android:inputType="textPersonName"