3

TextEdit に入力された文字列が Web アドレスであるかどうかを検証する必要があります。「www.stackoverflow.com」または IP アドレス。「64.34.119.12」。この 2 つの方法を試しましたが、成功しませんでした。ip という名前のプライベート クラス変数があります。

方法 1:

public boolean isAdress(){

        boolean isaddr = true;
        try
        {
            ip = new NetTask().execute(""+textEdit1.getText()).get();
        }
        catch (Exception ex)
        {
            isaddr = false;
        }
        return isaddr;
    }

方法 2 は、NetTask に送信する前に文字列をチェックする方法です。

public boolean isAdress(){
        String adress = textEdit1.getText().toString();
        boolean isaddr = true;
        if (adress.length() > 0) {
            String[] nums = adress.split(".");
            if (nums.length == 4) {
                for (String str : nums) {
                    int i = Integer.parseInt(str);
                    if ((i < 0) || (i > 255)) {
                        isaddr = false;
                    }
                }
            } 
        }
        return isaddr;
    }

この 2 番目の方法も機能しませんが、機能したとしても、Web アドレスを検証することはできません。

では、この両方のケースで文字列を検証できる方法はありますか?

編集:正規表現について読んだ後、私はこの方法も試しました:

private String regex = "\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";

public boolean isAdress(){
        String adress = textEdit1.getText().toString();
        try {
            Pattern patt = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
            Matcher matcher = patt.matcher(adress);
            return matcher.matches();
        } catch (RuntimeException e) {
        return false;
    }           
    }

しかし、常に false を返すようです。

4

4 に答える 4

5

簡単な答え: 正規表現を使ってみてください!

編集:

if(textEdit1.getText().matches(REGEX_URL)) {
    //DO URL THINGS
}

if(textEdit1.getText().matches(REGEX_IPADDRES)) {
    //DO IP THINGS
}

グーグルで検索すると、IPアドレスとURLの正しいREGEX文字列を見つけることができます...

注: URL の正規表現は、必要なものによって異なる場合があります。http:// https:// のみが必要なのか、それともすべての有効な URL (market:// など) が必要なのか...

于 2012-07-30T14:08:49.000 に答える
4

Patterns.IP_ADDRESS.matcher(url).matches();

于 2016-09-17T13:01:38.213 に答える
-3

より単純なアプローチはどうですか?それがIPアドレスかどうかを検出します。

public static boolean isIP(String input) {

        if (input.contains(".") && input.length()>1) {
            return TextUtils.isDigitsOnly( input.replace(".", "").trim() );
        }
        else {
            return false;
        }
    }
于 2012-07-30T16:57:47.360 に答える