以编程方式限制特殊字符 & space
Restrict special characters & space programmatically
我想限制用户以编程方式输入特殊字符 & space。
下面是我的代码
InputFilter[] alphaNumericFilter = new InputFilter[2];
alphaNumericFilter[0] = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
for (int k = start; k < end; k++) {
boolean isLetterOrDigit = Character.isLetterOrDigit(source.charAt(k));
boolean isSpaceChar = Character.isSpaceChar(source.charAt(k));
if ((source.length() > 0 && isSpaceChar) ||
(!isLetterOrDigit && !isSpaceChar) ||
(isSpaceChar && TextUtils.isEmpty(dest))) {
return "";
}
}
return null;
}
};
按下 space 它会删除最后一个字符。
你可以这样做:
public static InputFilter getAlphaNumericInputFilter(){
return new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
if(source.equals("")){ // for backspace
return source;
}
if(source.toString().matches("[a-zA-Z0-9 ]+")){
return source;
}
return "";
}
};
}
这里 如果您可以根据您的要求更改匹配字符串,例如。避免使用字母数字 space 那么它应该是这样的:[a-zA-Z0-9]+.
希望对你有帮助!
InputFilter alphaNumericFilter = new InputFilter() {
@Override
public CharSequence filter(CharSequence arg0, int arg1, int arg2, Spanned arg3, int arg4, int arg5)
{
for (int k = arg1; k < arg2; k++) {
if (!Character.isLetterOrDigit(arg0.charAt(k))) {
return "";
}
}
return null;
}
};
mFirstName.setFilters(new InputFilter[]{ alphaNumericFilter});
使用此代码过滤您的编辑文本
private String yourCharacterThatYouWantToBlock= " ~#^|$%&*!";
private InputFilter filter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (source != null && yourCharacterThatYouWantToBlock.contains(("" + source))) {
return "";
}
return null;
}
};
Now apply this filter to your edittext.
yourEditText.setFilters(new InputFilter[] { filter });
最后我通过在代码中添加以下行解决了这个问题
mEditText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
此行不会在键盘上显示建议。
我想限制用户以编程方式输入特殊字符 & space。 下面是我的代码
InputFilter[] alphaNumericFilter = new InputFilter[2];
alphaNumericFilter[0] = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
for (int k = start; k < end; k++) {
boolean isLetterOrDigit = Character.isLetterOrDigit(source.charAt(k));
boolean isSpaceChar = Character.isSpaceChar(source.charAt(k));
if ((source.length() > 0 && isSpaceChar) ||
(!isLetterOrDigit && !isSpaceChar) ||
(isSpaceChar && TextUtils.isEmpty(dest))) {
return "";
}
}
return null;
}
};
按下 space 它会删除最后一个字符。
你可以这样做:
public static InputFilter getAlphaNumericInputFilter(){
return new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
if(source.equals("")){ // for backspace
return source;
}
if(source.toString().matches("[a-zA-Z0-9 ]+")){
return source;
}
return "";
}
};
}
这里 如果您可以根据您的要求更改匹配字符串,例如。避免使用字母数字 space 那么它应该是这样的:[a-zA-Z0-9]+.
希望对你有帮助!
InputFilter alphaNumericFilter = new InputFilter() {
@Override
public CharSequence filter(CharSequence arg0, int arg1, int arg2, Spanned arg3, int arg4, int arg5)
{
for (int k = arg1; k < arg2; k++) {
if (!Character.isLetterOrDigit(arg0.charAt(k))) {
return "";
}
}
return null;
}
};
mFirstName.setFilters(new InputFilter[]{ alphaNumericFilter});
使用此代码过滤您的编辑文本
private String yourCharacterThatYouWantToBlock= " ~#^|$%&*!";
private InputFilter filter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (source != null && yourCharacterThatYouWantToBlock.contains(("" + source))) {
return "";
}
return null;
}
};
Now apply this filter to your edittext.
yourEditText.setFilters(new InputFilter[] { filter });
最后我通过在代码中添加以下行解决了这个问题
mEditText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
此行不会在键盘上显示建议。