2

EditText があり、ユーザーが MAC アドレスを入力できるようにしたいと考えています。

ユーザーが A、B、C..F と数字のみを入力し、正しい形式 (00:11:22:33:44:55) で書き込むように制限するにはどうすればよいですか?

検証方法を教えてください。

編集:必要なことを行うこのコードを見つけましたが、IPアドレスを使用しています。あなたが提案した正規表現を使用しようとしましたが、機能しません。

    public void showIP(){
    // Set an EditText view to get user input 
    final EditText input = new EditText(this);
    input.setInputType(InputType.TYPE_CLASS_PHONE);
    input.setSingleLine();
    InputFilter[] filters = new InputFilter[1];
    //filter used to allow only IPv4 style address
    filters[0] = new InputFilter() {
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            if (end > start) {
                String destTxt = dest.toString();
                String resultingTxt = destTxt.substring(0, dstart) + source.subSequence(start, end) + destTxt.substring(dend);
                if (!resultingTxt.matches("^[\\dA-F]{2}(?::[\\dA-F]{2}){5}$")) { 
                    return "";
                } /*else {
                    String[] splits = resultingTxt.split("\\:");
                    for (int i=0; i<splits.length; i++) {
                        if (Integer.valueOf(splits[i]) > ) {
                            return "";
                        }
                    }
                }*/
            }
        return null;
        }
    };
    input.setFilters(filters);

    input.setText(serverIP);
    new AlertDialog.Builder(this)
        .setTitle(R.string.ServerIP)
        .setMessage("Change SERVER IP")
        .setView(input)
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                serverIP=input.getText().toString();
                SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
                SharedPreferences.Editor editor = settings.edit();
                editor.putString("IP", input.getText().toString());
                // Commit the edits!
                editor.commit();
                view.updateServerIP();
            }
        }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                //do nothing
            }
        }).show();
}
4

3 に答える 3

6

このコードでは、MAC アドレス フィールドは ':' を自動生成します。その条件も解除できます。

final EditText input = new EditText(context);
        input.setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
        input.setSingleLine();
        InputFilter[] filters = new InputFilter[1];

        filters[0] = new InputFilter() {


            @Override
            public CharSequence filter(CharSequence source, int start, int end,
                    Spanned dest, int dstart, int dend) {
                // TODO Auto-generated method stub
                if (end > start) {
                    String destTxt = dest.toString();
                    String resultingTxt = destTxt.substring(0, dstart) + source.subSequence(start, end) + destTxt.substring(dend);
                    if (resultingTxt.matches("([0-9a-fA-F][0-9a-fA-F]:){0,5}[0-9a-fA-F]"))
                    {

                    }
                    else if(resultingTxt.matches("([0-9a-fA-F][0-9a-fA-F]:){0,4}[0-9a-fA-F][0-9a-fA-F]")){
                        return source.subSequence(start, end)+":" ;
                    }
                    else if(resultingTxt.matches("([0-9a-fA-F][0-9a-fA-F]:){0,5}[0-9a-fA-F][0-9a-fA-F]")){

                    }
                    else
                    { 
                        return "";
                    } 
                }
                return null;
            }
        };
        input.setFilters(filters);
于 2014-05-11T11:57:36.680 に答える
0

([\da-fA-F]{2}(?:\:|$)){6}

ここでわかるように、これはうまく機能します。

http://regexr.com?32ugi

"-" も区切り記号として含めたい場合 (これは標準で有効です)、これを使用できます。

([\da-fA-F]{2}(?:\:|-|$)){6}

http://regexr.com?32ugl

于 2012-11-26T18:55:37.937 に答える
0

0 ~ F の文字に一致する一般的な正規表現は次のようになります。[\dA-F]

したがって、それを念頭に置いて、次のことができます。^[\dA-F]{2}(?:[\-][\dA-F]{2}){5}$

Nothe: (?:非キャプチャ グループ用です。

デモ

于 2012-11-26T17:15:47.787 に答える