0

我有一个EditText用户应该放置 IP 地址的位置,例如192.168.21.212。如何为此添加验证?我试过

android:inputType="numberDecimal"

但它只允许一个.(点)。如何让它允许三个点?

4

7 回答 7

3

在 xml 中的 EditText 中,添加android:digits="0123456789.,! etc"

于 2013-04-23T06:23:00.797 回答
3

试试这个 :

       <EditText
            android:id="@+id/ip_ed_txt"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:digits="0123456789."
            android:inputType="number" >
        </EditText>
于 2013-04-23T06:26:05.690 回答
2

您可以使用具有isValidInet4Address(String)的 Apache Commons InetAddressValidator类

于 2013-04-23T06:25:17.010 回答
0

您需要Textwatcher该 textview 对象。您可以通过

文本观察器

界面。

Android 中没有用于 IP 地址验证的 inputType。

于 2013-04-23T06:23:42.867 回答
0

您需要创建自己的 InputFilter:http: //developer.android.com/reference/android/text/InputFilter.html

EditText text = new EditText(this);
    InputFilter[] filters = new InputFilter[1];
    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 ("^\\d{1,3}(\\.(\\d{1,3}(\\.(\\d{1,3}(\\.(\\d{1,3})?)?)?)?)?)?")) { 
                    return "";
                } else {
                    String[] splits = resultingTxt.split("\\.");
                    for (int i=0; i<splits.length; i++) {
                        if (Integer.valueOf(splits[i]) > 255) {
                            return "";
                        }
                    }
                }
            }
        return null;
        }
    };
    text.setFilters(filters);
于 2013-04-23T06:26:15.120 回答
0

当用户提交编辑文本时,您可以在代码中检查它。

可能是这样的吗?:

public boolean DotValidator(String text) {
    int anumOfDots = 0;

    for (int i = 0; i < text.length(); i++) {
        if (text.charAt(i) == '.') {
            anumOfDots++;
        }
    }
    if (anumOfDots == 3) {
        return true;
    } else {
        return false;
    }
}
于 2013-04-23T06:26:29.787 回答
0

IP 地址验证器

private static final String PATTERN = 
    "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";

public static boolean validate(final String ip){          
  Pattern pattern = Pattern.compile(PATTERN);
  Matcher matcher = pattern.matcher(ip);
  return matcher.matches();             
}
于 2013-04-23T06:29:28.057 回答