【问题标题】:How to check if a user inputted value is valid?如何检查用户输入的值是否有效?
【发布时间】:2013-01-06 04:10:50
【问题描述】:

我正在开发一个应用程序,在该应用程序中,用户可以选择在两个 EditText 视图中为纬度和经度输入一组坐标。然后输入的坐标/位置将显示在地图上,效果很好。但是,如果用户输入了无效值,应用程序就会崩溃,我需要防止这种情况发生。

纬度/经度值必须是例如 35.27,导致应用程序崩溃的原因是当有多个点“。”时。例如33.23.43。如何检查输入的值是否只有一个点?

我在这方面并没有太多经验,而且我对 android 还是很陌生,所以任何帮助都将不胜感激。

【问题讨论】:

  • 如果您知道输入应该只占用 1 个点,请使用正则表达式来检测最多只有一个句点的数字。我不确定您是否以正确的方式处理地图。有多少用户会知道确切的坐标?相反,更好的方法是将您的 Google 地图与 Google Places API 集成。这将允许用户搜索一个位置,该位置将查询 API,您将获得一个自动完成,并且用户单击自动完成位置,然后您从中获得纬度/经度。
  • 如果答案有效,请告诉我
  • 我对纬度/经度一无所知。如果用户输入5.7是否有效,或者156.175呢?
  • @jcw 是的,它会,但如果不是,例如5.7.1
  • 你有应用崩溃的堆栈跟踪吗?

标签: java android


【解决方案1】:
bool badInput = countChar(s, '.')  > 1;

countChar 在哪里

int countChar(string s, char c)
{
    int counter = 0;
    for( int i=0; i<s.length(); i++ ) {
        if( s.charAt(i) == c ) {
            counter++;
        } 
    }
    return counter;
}

【讨论】:

  • 如果用户是欧洲人并且输入了“,”或其他字符怎么办?
  • @bluewhile 可以使用DecimalFormatSymbols#getDecimalSeparator() 并将其传入。问题是.,因此我使用'.' 作为参数。
【解决方案2】:

我打算建议你检查你得到的字符串的长度,但是因为 1.5 和 153.163 都是有效的,所以不起作用。我建议您使用 `try/catch 语句。例如

try{
    //do what ever you do with the numbers here
catch(Exception e){
//the user has inputted an invalid number deal with it here
}

【讨论】:

  • 嗯!我确定我已经尝试过这样的事情,但我想我犯了一个错误。谢了哥们!!干杯
【解决方案3】:

【讨论】:

  • 我认为如果用户一次粘贴多个字符,这将无法正常工作。
【解决方案4】:

只需使用regexp 来检查输入的有效性。

Pattern p = Pattern.compile("^(-)?\d*(\.\d*)?$");
Matcher m = p.matcher(inputString);
if (m.find()) { 
    ////Found
}
else {
  //Not found
}

现在在字段上实现focus listener 以运行此有效性测试。

或者:您也可以从 xml 中执行此操作。

在 XML 中为editText 添加属性:

android:inputType="number|numberSigned|numberDecimal" 

对于有符号浮点数

谢谢。

【讨论】:

  • 您还需要一个\ 来转义正则表达式中的反斜杠。
猜你喜欢
  • 2014-06-30
  • 2014-08-08
  • 1970-01-01
  • 2016-05-09
  • 2014-10-24
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多