6

我有一个表单,用户将某个位置的 GPS 坐标插入到相应的照片中。过滤掉无效数字很容易,因为我只需要测试 (-90, 90), (-180, 180) 范围内的纬度/经度坐标。

但是,这也意味着常规文本是有效的输入。

我尝试将测试模式更改为

var pattern= "^[a-zA-Z]" 

并在函数中用于检测字母字符

$(".lat").keyup(function(){
  var thisID= this.id;
  var num = thisID.substring(3, thisID.length);
  var thisVal = $(this).val();

  //if invalid input, show error message and hide save button
  if (pattern.test(thisVal)){
    $("#latError"+num).fadeIn(250);
    $("#save"+num).fadeOut(100)
  } 
  else { //otherwise, hide error message and show save
    $("#save"+num).fadeIn(250);
    $("#latError"+num).fadeOut(100);
  }
});

但是,这不起作用,因为 Firebug 抱怨这pattern.test不是一个函数 什么会解决这个问题?

4

4 回答 4

17

你需要使用正则表达式吗?考虑以下:

var val = parseFloat(lat);
if (!isNaN(val) && val <= 90 && val >= -90)
    return true;
else
    return false;
于 2012-07-13T17:25:59.937 回答
17

这是我在我的项目中使用的:

app.user.ck_lat = /^(-?[1-8]?\d(?:\.\d{1,18})?|90(?:\.0{1,18})?)$/;
app.user.ck_lon = /^(-?(?:1[0-7]|[1-9])?\d(?:\.\d{1,18})?|180(?:\.0{1,18})?)$/;

function check_lat_lon(lat, lon){
  var validLat = app.user.ck_lat.test(lat);
  var validLon = app.user.ck_lon.test(lon);
  if(validLat && validLon) {
      return true;
  } else {
      return false;
  }
}

check_lat_lon(-34.11242, -58.11547) 如果有效则返回 TRUE,否则返回 FALSE

我希望这对你有用!

于 2012-10-15T19:44:50.740 回答
4

模式怎么样,-?[0-9]{1,3}[.][0-9]+然后你parseInt并检查你之前所说的范围。

于 2012-07-13T17:26:53.057 回答
3

test()RegExp对象的一个​​方法——你在一个字符串上运行它,所以会失败。

将您的模式括在 RegExp 文字 ( /pattern/) 中,因此

var pattern= /^[a-zA-Z]/

这将消除您遇到的错误,但是您有一个单独的问题:a)您的模式是否适合您想要它做的事情;b)您是否需要正则表达式。

REGEX 作用于字符串 - 它不能用于确定一个数字是否在给定范围内(除非该范围是 0-10 包括在内)。

@flem 的回答显示了处理您正在做的事情的最佳方法 - 不需要 REGEX。调用parseInt()将捕获非数字字符,因为NaN如果值包含任何字符,它将返回。

于 2012-07-13T17:26:39.117 回答