Проверка в EditText разрешить IP или хост веб-URL - PullRequest
4 голосов
/ 19 сентября 2011

Мне нужно дать проверку моего EditText, чтобы он позволил мне ввести действительный

формат IP-адреса (?.?.?.?), Т.е. пример 132.0.25.225

или

формат веб-URL (www.?.?) Т.е. пример www.example.com

логика такова, что если пользовательский тип любойсначала числовое значение, затем проверка (IP) будет выполнять действие

, иначе пользователь должен написать "www" перед любой веб-строкой

Примечание : он должен выполнить onKeyListener () из EditText, я имею в виду, когда пользователь вводит данные

Короче - я не собираюсь проверять, когда пользователь завершает ввод, и нажимаю кнопку ОК

Любая идея приветствуется, спасибо.

Ответы [ 6 ]

12 голосов
/ 19 сентября 2011

ф

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();             
}

URL

try {
    new java.net.URI(url);
} catch(MalformedURLException e) {
    // url badly formed
}
1 голос
/ 26 марта 2013

Этот ион отлично подходит для проверки URL в Android

 if (!URLUtil.isValidUrl(url)) {
    Toast.makeText(this, "Invalid URL", Toast.LENGTH_SHORT).show();
    return;
    }
1 голос
/ 19 сентября 2011

попробуйте это ..

public void checkIP(String Value)
{
    Pattern pattern = Pattern.compile("[0-255].[0-255].[0-255].[0-255]");
    Matcher matcher = pattern.matcher(Value);
    boolean IPcheck = matcher.matches();
    if(IPcheck)
           //it is IP
        else
           //it is not IP


}
0 голосов
/ 30 ноября 2016

следует использовать класс java.net.InetAddress. Вы можете проверить все форматы IP-адреса: адрес хоста (например, 132.0.25.225) или имя хоста (например, www.google.com); Формат IPv4 или IPv6 в порядке.

Исходный код должен выполняться в рабочем потоке, потому что иногда InetAddress.getAllByName (mStringHost) занимает много времени. например: вы получаете адрес от имени хоста.

Thread mThread = new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            String mStringHost = "www.google.com";
            //String mStringHost = "192.168.1.2";
            InetAddress[] list_address = InetAddress.getAllByName(mStringHost);
            if(list_address != null && list_address.length >=1){
                InetAddress inetAddress = list_address[0];
                Log.d("test","inetAddress ="+ inetAddress.getHostAddress());
                if( inetAddress instanceof Inet4Address){
                    //IPv4 process
                }else{
                    //IPv6 process
                }
            }else{
                throw new Exception("invalid address");
            }
        }catch(Exception e){
            Log.e(TAG,"other exception",e);
            Toast.makeText(context, "Invalid host address or host name", Toast.LENGTH_SHORT).show();
            //process invalide ip address here
        }
    }
});

mThread.start()
0 голосов
/ 09 сентября 2013

Здесь другое решение для проверки IP-адреса, но оно может использоваться в качестве справочного материала и для проверки веб-адреса.

EditText ipText = (EditText) findViewById(R.id.ip_address);
ipText.setKeyListener(IPAddressKeyListener.getInstance());

......... * * 1004

public class IPAddressKeyListener extends NumberKeyListener {

private char[] mAccepted;
private static IPAddressKeyListener sInstance;

@Override
protected char[] getAcceptedChars() {
    return mAccepted;
}

/**
 * The characters that are used.
 * 
 * @see KeyEvent#getMatch
 * @see #getAcceptedChars
 */
private static final char[] CHARACTERS =

new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.' };

private IPAddressKeyListener() {
    mAccepted = CHARACTERS;
}

/**
 * Returns a IPAddressKeyListener that accepts the digits 0 through 9, plus
 * the dot character, subject to IP address rules: the first character has
 * to be a digit, and no more than 3 dots are allowed.
 */
public static IPAddressKeyListener getInstance() {
    if (sInstance != null)
        return sInstance;

    sInstance = new IPAddressKeyListener();
    return sInstance;
}

/**
 * Display a number-only soft keyboard.
 */
public int getInputType() {
    return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL;
}

/**
 * Filter out unacceptable dot characters.
 */
@Override
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;
}

}

0 голосов
/ 07 марта 2012

Добавьте TextWatcher к вашему EditText и в

afterTextChanged (Editable s)

Проверьте ввод с помощью регулярного выражения, и если входной символ не соответствует регулярному выражениюпросто удалите его, используя следующий метод.

Editable.delete(int start, int end)
...