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

时间:2017-07-29 10:05:22

标签: jquery regex input latitude-longitude mask

我正在尝试使用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")之类的值时,验证会返回true,但我想在这里完成的是在用户输入时验证这些输入。

例如,我首先输入4:

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

因此输入没有值。

2 个答案:

答案 0 :(得分:1)

Latitute:/^(?:-|-?(?:\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
      )?
 )?
 $

答案 1 :(得分:0)

换句话说,当用户输入你想要一个原本无效的输入时?为什么不在输入失去焦点后检查?或者你可以使用最后一个键输入的某种计时器。