利用正则表达式校验金额最多保留两位小数实例代码
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">正则表达式校验金额最多保留两位小数,那么必须满足如下条件:</a></li><li><a href="#_label1">部分正则表达式符号说明:</a></li><li><a href="#_label2">第一步,小数点之前表达式</a></li><li><a href="#_label3">第二步,小数点及小数位置</a></li><li><a href="#_label4">总结</a></li></ul></div><p>先给出表达式结果:<code>^(({1}\d*)|(0{1}))(\.\d{1,2})?$</code></p><blockquote><p>有同学留言0识别错误,可用这个:(({1}\d*)(.\d{1,2})?)|(0{1}.\d{1,2})<br />思路:1、小数点前非0,则小数位置可有可无; 2、小数点前为0,那么小数位置必有<br />修改于 2022-08-03</p></blockquote>
<p>不熟悉正则表达式的同学,咋一看,一脸懵逼,我们来分解说明一下</p>
<p class="maodian"><a name="_label0"></a></p><h2>正则表达式校验金额最多保留两位小数,那么必须满足如下条件:</h2>
<ul><li>正数金额,如5,10等</li><li>一位小数,如5.1, 5.2等</li><li>二位小数,如5.12, 5.13等</li></ul>
<p class="maodian"><a name="_label1"></a></p><h2>部分正则表达式符号说明:</h2>
<ul><li>^ 匹配输入字行首</li><li> 只能取1-9之间的正整数</li><li>{1} 前面的表达式只能取一位</li><li>\d 正整数,等同于</li><li>* 前面表达式任意位数</li><li>| 或的意思</li><li>{1,2} 表示最少重复1次,最多重复2次</li><li>? 简单理解为或有或无</li><li>$ 匹配输入字行尾</li></ul>
<p class="maodian"><a name="_label2"></a></p><h2>第一步,小数点之前表达式</h2>
<p>两种情况:</p>
<ul><li>55.5 不能以0开头<br /><code>{1}\d*</code></li><li>0.5 开头为0,并且只有1位<br /><code>0{1}</code></li></ul>
<p>两种情况结合起来:<br /><code>({1}\d*)|(0{1})</code></p>
<p class="maodian"><a name="_label3"></a></p><h2>第二步,小数点及小数位置</h2>
<p>三种情况:</p>
<ul><li>5.1 只有一位小数</li><li>5.12 有2位小数<br /><code>\.\d{1,2}</code></li><li>5 没有小数<br /><code>(\.\d{1,2})?</code></li></ul>
<p><strong>把两步拼接到一起,就是前面的表达式:</strong> (^和$可不加,具体用法见<a href="https://www.jb51.net/article/258547.htm" target="_blank">正则表达式中的^和$</a>)</p>
<p><code>^(({1}\d*)|(0{1}))(\.\d{1,2})?$</code></p>
<p><strong>测试代码:</strong></p>
<div class="jb51code"><pre class="brush:java;">import java.util.regex.Pattern;
/**
* @author yanghao
* @version PatternTest.java, v 0.1 2019-03-28 11:07
*/
public class PatternTest {
private static final Pattern PATTERN = Pattern.compile("^(({1}\\d*)|(0{1}))(\\.\\d{1,2})?$");
public static void main(String[] args){
System.out.println("5 === " + PATTERN.matcher("5").matches());
System.out.println("5. === " + PATTERN.matcher("5.").matches());
System.out.println("5.1 === " + PATTERN.matcher("5.1").matches());
System.out.println("5.12 === " + PATTERN.matcher("5.12").matches());
System.out.println("5.123 === " + PATTERN.matcher("5.123").matches());
System.out.println("0.12 === " + PATTERN.matcher("0.12").matches());
}
}
</pre></div>
<p>测试结果:</p>
<blockquote><p>5 === true<br />5. === false<br />5.1 === true<br />5.12 === true<br />5.123 === false<br />0.12 === true</p></blockquote>
<p class="maodian"><a name="_label4"></a></p><h2>总结</h2>
頁:
[1]