とボタンのあるダイアログがEditText
あります。これEditText
により、作成するデータベース テーブルに名前が付けられるため、検証が最も重要になります。だから私は2つの質問をしたいと思います:
1) これは非常に単純ですが、どこにも見つけることができませんでした: データベースのテーブル名に使用できる文字は何ですか? 数字を受け入れることはできますか?また、数字を最初の文字にすることはできますか?
EditText
2) を使用して検証することができましたTextWtacher
。コードは次のとおりです。
et_name.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
String filtered_str = s.toString();
if (filtered_str.matches(".*[^a-z^0-9].*")) {
filtered_str = filtered_str.replaceAll("[^a-z^0-9]", "");
s.clear();
// s.insert(0, filtered_str);
Toast.makeText(context,
"Only lowercase letters and numbers are allowed!",
Toast.LENGTH_SHORT).show();
}
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {}
});
現在、ユーザーが小文字と数字以外の文字を挿入すると、テキスト ボックスはクリアされます。s.insert(0, filtered_str);
EditText をフィルター処理された文字列に置き換えるためにコメントを外すと、アプリがハングします。そして、デバッグで何を見つけたと思いますか?
エラー/AndroidRuntime(2454): java.lang.StackOverflowError
=D
問題は...どうすればsテキストを置き換えることができますか?
-> s.replace(0, s.toString().length(), filtered_str);
(もちろん、s.clear を削除します) も機能しないようです。