Open
Description
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小时制的时间吗?
答案如下:
3. 带有正负值的温度表示方法
/^[-+]?[0-9]+(\.[0-9]*)?$/
-
我们再给要表示的温度加上单位,C|F,所以最后完整的表达式就是:
/^[-+]?[0-9]+(\.[0-9]*)?[C|F]$/
虽然我们达到了基本的效果,但它还不能匹配.123
这样的数字,当然我们可以添加一个整数位0来匹配,所以这也不是一个严重的问题。当然还有其他技巧用来处理浮点数。 -
我们再来看,对整个正则表达式加上括号与去掉括号表达的含义一样吗?答案是:一样的。所以在我们日常编写正则表达式的时候,可以将一个复杂的表达式拆分成多个括号从而简化编写过程。
- 不知道你发现没有,在C|F之前,我们仍然需要一个空格,且小写的c和f也是可以被接受的。而很多时候,我们会输入空格或者是制表符,所以就可以得到下面的表达式:
/^([-+]?[0-9]+(\.[0-9]*)?)\s*([CF])$/i