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

これは私が私のプロジェクトで使用しているものです:

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 に答える
17

正規表現を使用する必要がありますか? 次の点を考慮してください。

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

パターンはどうですか、-?[0-9]{1,3}[.][0-9]+前に言ったようにparseIntして範囲を確認します。

于 2012-07-13T17:26:53.057 に答える
3

test()オブジェクトのメソッドRegExpです-文字列で実行しているため、失敗します。

パターンを RegExp リテラル ( /pattern/) で囲むので、

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

これにより、発生しているエラーは解消されますが、次の点に関して別の問題があります。b) REGEX が必要かどうか。

REGEX は文字列に作用します。数値が特定の範囲内にあるかどうかを判断するために使用することはできません (その範囲が 0 から 10 を含む場合を除く)。

@flemの回答は、あなたがしていることにアプローチする最良の方法を示しています.REGEXは必要ありません. への呼び出しは、値に数値が含まれている場合parseInt()に返されるため、数値以外の文字をキャッチNaNします。

于 2012-07-13T17:26:39.117 に答える