Java 验证IP永远不会成功
用户在EditTextPreference中输入IP地址,我尝试使用以下代码验证IP:Java 验证IP永远不会成功,java,android,validation,ip,matcher,Java,Android,Validation,Ip,Matcher,用户在EditTextPreference中输入IP地址,我尝试使用以下代码验证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
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地址,代码将永远不会认为它是有效的,并且日志会显示“不匹配!”。我做错了什么?将
onPreferenceChange()
方法中的测试更改为:
IP_ADDRESS.matcher(newValue.toString()).matches()
您应该在方法
onPreferenceChange()
中创建匹配器,而不是预先创建它。@GuillaumePolet这不会改变任何东西。是的,它会改变一切。但是我不确定你的regexp是否正确correct@GuillaumePolet:我试过了,但行为没有改变。。。这就是我的意思。正则表达式应该没问题,我是从不知道Android的确切内部结构得到的,但是如果在onPreferenceChange()方法中使用类似的东西,它应该可以工作:IP\u ADDRESS.matcher(newValue.toString()).matches()