2014-02-07 82 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"