jquery 经度和纬度的正则表达式屏蔽输入

regex masked input for latitude and longitude with jquery

我正在尝试使用 jQuery 屏蔽专门针对纬度和经度值的输入。我开始搜索正则表达式值来验证它们中的每一个,希望我找到了这些:

for latitude
/^-?([0-8]?[0-9]|90)\.[0-9]{1,6}$/
for longitude
/^-?((1?[0-7]?|[0-9]?)[0-9]|180)\.[0-9]{1,6}$/

我还找到了一个使用正则表达式屏蔽输入的函数,如下所示:

$(this).keypress(function(event){
    if(!event.charCode){
        return true;
    }
    var part1 = this.value.substring(0,this.selectionStart);
    var part2 = this.value.substring(this.selectionEnd,this.value.length);
    if(!mask.test(part1 + String.fromCharCode(event.charCode) + part2)){
        return false;
    }
});

现在,当我检查像 /^-?([0-8]?[0-9]|90)\.[0-9]{1,6}$/.test("44.4") 这样的值时,验证 returns true 但我想在这里完成的是在用户输入时验证这些输入。

例如我开始输入 4:

/^-?([0-8]?[0-9]|90)\.[0-9]{1,6}$/.test("4") returns false;

因此输入没有价值。

换句话说,当用户键入您想要的输入时,否则将无效通过?为什么不在输入失去焦点后才检查?或者您可以使用上次键入的某种计时器。

纬度:/^(?:-|-?(?:\d|[1-8]\d?|90?)(?:\.[0-9]{0,6})?)$/

 ^ 
 (?:
      - 
   |  
      -? 
      (?:
           \d 
        |  [1-8] \d? 
        |  90?
      )
      (?: \. [0-9]{0,6} )?
 )
 $

经度:/^(?:-|-?(?:\d|[1-9]\d?|1(?:[0-7]\d?)?|1(?:80?)?)(?:\.[0-9]{0,6})?)$/

 ^ 
 (?:
      - 
   |  
      -?     
      (?:
           \d 
        |  [1-9] \d? 
        |  1 
           (?: [0-7] \d? )?
        |  1
           (?: 80? )?
      )
      (?: \. [0-9]{0,6} )?
 )
 $  

24 小时制:^(?:\d|0\d?|1\d?|2[0-3]?)(?::(?:\d|0\d?|[1-5]\d?)?)?$

 ^     
 (?:
      \d                  #  0 -  9
   |  0 \d?               # 00 - 09
   |  1 \d?               # 10 - 19
   |  2 [0-3]?            # 20 - 23
 )
 (?:
      :                   # :
      (?:
           \d             #  0 -  9
        |  0 \d?          # 00 - 09
        |  [1-5] \d?      # 10 - 59
      )?
 )?
 $