-1
Пользователь вводит IP-адрес в EditTextPreference, и я стараюсь, чтобы проверить IP с этим кодом:Validating IP никогда не удается
private EditTextPreference ipPref;
private Matcher matcher;
private SharedPreferences settings;
private final Pattern IP_ADDRESS
= Pattern.compile(
"((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(25[0-5]|2[0-4]"
+ "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]"
+ "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}"
+ "|[1-9][0-9]|[0-9]))");
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
//PREF_IP is the android:key of the EditTextPreference
ipPref = (EditTextPreference) getPreferenceManager().findPreference("PREF_IP");
settings = PreferenceManager.getDefaultSharedPreferences(this);
matcher = IP_ADDRESS.matcher(settings.getString("PREF_IP", "0.0.0.0"));
ipPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
try
{
if(matcher.matches()){
Log.d("settings", "matches!");
return true;
}else{
Log.d("settings", "doesn't match!");
return false;
}
}
catch(Exception e)
{
return false;
}
}
});
}
Если я ввести действительный IP-адрес, код никогда не видит его как действительным, и log говорит, что «не соответствует!». Что я делаю не так?
Вы должны создать свой Искатель в методе 'onPreferenceChange()' вместо создания его заранее. –
@GuillaumePolet, который ничего не меняет. – glass
Да, это все меняет. Но я не уверен, что ваше регулярное выражение правильно –