Skip to content

金额(可能包含小数)、时间的表示、温度 #17

Open
@JCHappytime

Description

@JCHappytime

1. 美元金额

/\$[0-9]+(\.[0-9][0-9])?/

美元金额

PS:只要把前面的$替换为其他地区/国家的金额表示符号,就能满足表示金额的基本要求。

但是这个表达式非常简陋,它存在以下的问题:

  • 它只能接受$1000,而无法接受$1,000;
  • 它也无法匹配$.49这种类型的金额。

2. 时间匹配

/[0-9]?[0-9]:[0-9][0-9].(am|pm)/

匹配时间

从上图中的例子我们显然能够看到,无效时间99:99 pm也被匹配到了,显然这是不正确的。那该如何修改呢?我们分析一下:

  • 如果小时数是一个两位数,第一位只能是1.但是1?[0-9]仍然能够匹配到19(也能够匹配到0),所以最好的办法是把小时部分分为两种情况来处理,1[012]匹配两位数;[1-9]匹配一位数,结果就是:(1[012]|[1-9])
  • 分钟数就要简单一些。第一位数字应该是[0-5],此时第二位数字应该是[0-9]
  • 综合起来就是(1[012]|[1-9]):[0-5][0-9].(am|pm)

问题:举一反三,那我们能够处理24小时制的时间吗?
答案如下:

24小时制

3. 带有正负值的温度表示方法

/^[-+]?[0-9]+(\.[0-9]*)?$/

温度表示

  1. 我们再给要表示的温度加上单位,C|F,所以最后完整的表达式就是:/^[-+]?[0-9]+(\.[0-9]*)?[C|F]$/
    虽然我们达到了基本的效果,但它还不能匹配.123这样的数字,当然我们可以添加一个整数位0来匹配,所以这也不是一个严重的问题。当然还有其他技巧用来处理浮点数。

  2. 我们再来看,对整个正则表达式加上括号与去掉括号表达的含义一样吗?答案是:一样的。所以在我们日常编写正则表达式的时候,可以将一个复杂的表达式拆分成多个括号从而简化编写过程。

括号

  1. 不知道你发现没有,在C|F之前,我们仍然需要一个空格,且小写的c和f也是可以被接受的。而很多时候,我们会输入空格或者是制表符,所以就可以得到下面的表达式:
/^([-+]?[0-9]+(\.[0-9]*)?)\s*([CF])$/i

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions