【问题标题】:regex masked input for latitude and longitude with jquery使用jquery的经纬度的正则表达式屏蔽输入
【发布时间】:2018-01-05 09:01:37
【问题描述】:

我正在尝试使用 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;

因此输入没有价值。

【问题讨论】:

  • 这里怎么了?
  • 还有什么需要解释的?
  • 我看到你做了所有你想要监听事件和验证输入的事情,否则我找不到问题。
  • 问题是正则表达式似乎与小于 xx.x 的值不匹配
  • 例如我在键盘上按任意数字,正则表达式返回false,输入没有值。

标签: jquery regex input latitude-longitude mask


【解决方案1】:

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

【讨论】:

  • 随着我的进一步研究,我注意到如果我调整正则表达式是可能的,但我还没有成功。
【解决方案2】:

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
      )?
 )?
 $

【讨论】:

  • 谢谢你,前瞻解决了问题,你能帮我进一步处理开头的可选“-”吗?
  • 是的,当输入值为“-”时,它再次返回 false,但对于正数,它可以正常工作。
  • 你太棒了!
  • 我非常感谢你,但是纬度的第一个正则表达式没有得到点“。”之前的第二个数字
  • 好的,我只添加了可能的-。还有什么不行的?
猜你喜欢
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 2016-06-14
相关资源
最近更新 更多