纬度和经度的正则表达式



我想要用于检查有效lat/long for india only的正则表达式。经度范围为70-98,小数点后一位,纬度范围为8-36,小数点前一位

我已经在android中实现了这一点。这段代码我分别为lat和along的-90到90和-180到180的范围编写,它正在工作,但现在我的lat和long的范围发生了变化。

对于小数点,它应该允许8.0到36.0。

public class Manual_LatLong extends Activity
{
private EditText LAT1;
private EditText LONGITUDE1;
private static final String TAG_LAT = "LAT";
private static final String TAG_LONG = "LONGITUDE";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_manual__lat_long);
    LAT1 = (EditText) findViewById(R.id.editText1);
    LONGITUDE1 = (EditText) findViewById(R.id.editText2);
    findViewById(R.id.show).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
             String LAT = LAT1.getText().toString();
            if (!isValidLAT(LAT)) {
                LAT1.setError("Invalid Latitude");
                LAT1.requestFocus(LAT.length());
            }
            else{
                 String LONGITUDE = LONGITUDE1.getText().toString();
                 if (!isValidLONG(LONGITUDE)) {
                    LONGITUDE1.setError("Invalid LONGITUDE");
                    LONGITUDE1.requestFocus(LONGITUDE.length());
                }
                 else{
                    Intent in = new Intent(getApplicationContext(), LocationActivity.class);
                    // Sending lat/long to next activity
                    in.putExtra(TAG_LAT, LAT);
                    in.putExtra(TAG_LONG, LONGITUDE);
                    startActivityForResult(in, 100);
                 }
             }

        }
    });
}
private boolean isValidLAT(String LAT) {
    String LAT_PATTERN = "(-?[0-8]?[0-9](\.\d*)?)|-?90(\.[0]*)?";
    Pattern pattern = Pattern.compile(LAT_PATTERN);
    Matcher matcher = pattern.matcher(LAT);
    return matcher.matches();
}

private boolean isValidLONG(String LONGITUDE) {
    String LONG_PATTERN = "(-?([1]?[0-7][1-9]|[1-9]?[0-9])?(\.\d*)?)|-?180(\.[0]*)?";
    Pattern pattern = Pattern.compile(LONG_PATTERN);
    Matcher matcher = pattern.matcher(LONGITUDE);
    return matcher.matches();
}

}

我认为这将是使用Regex最糟糕的事情之一。你就不能把它换成双人间吗?

double latitude = Double.parseDouble(R.id.editText1.getText().toString());
double longitude = Double.parseDouble(R.id.editText2.getText().toString();

并使用if(纬度<36&&纬度等)进行比较?

编辑:

如果必须是最多一位小数:

String latitude_s = R.id.editText1.getText().toString();
String longitude_s = R.id.editText2.getText().toString();

如果每个字符串只有一个小数点,请先检查它是否有小数点。(点击此处查看如何检查小数位数)

之后,您可以继续比较双打。

最新更新