首页 > 解决方案 > 正则表达式接受从 0 到 168 的所有小数,后跟 N 或 S

问题描述

我必须建立一个常规的 exp,它将接受从 0 到 168 的所有数字,后跟“N”或“S”。

我准备了以下常规 exp,除了将 168.11 视为有效输入外,它工作正常。

常规经验:

/\b([1-9]|[1-9][0-9]|1[01][0-9]|16[0-8])(\.\d{1,2})?[N,S]?$/

有效的:

168S
11.2
 10
140
125N
130S
3S
3.2
168.00S

无效的:

168.11
168.12S
168.12N

谁能建议我缺少什么?谢谢!

标签: javascriptregex

解决方案


您可以将此正则表达式与可选匹配项一起使用:

^\s*(?:(?:\d|[1-9]\d|1[0-5]\d|16[0-7])(?:\.\d{1,2})?|168(?:\.0{1,2})?)[NS]?$

正则表达式演示

正则表达式详细信息:

  • ^\s*: 在开始时匹配 0 个或多个水平空格
  • (?:: 启动非捕获组 #1
    • (?::启动非捕获组#2
      • \d: 一位数到数字 from 0to9
      • |: 或者
      • [1-9]\d: 匹配数字从1099
      • |: 或者
      • 1[0-5]\d: 匹配数字从100159
      • |: 或者
      • 16[0-7]: 匹配数字从160167
    • ): 结束非捕获组 #2
    • (?:\.\d{1,2})?: 匹配可选的小数点后跟 1 或 2 位数字
    • |: 或者
    • 168: 匹配168
    • (?:\.0{1,2})?:匹配可选.0.00
  • ): 结束非捕获组#1
  • [NS]?: 匹配可选NS结束前
  • $: 结尾

推荐阅读