我想使用正则表达式检查数字是否为50或更多。这本身没问题,但是数字字段有另一个正则表达式,检查输入数字的格式。
该号码将采用大陆格式:123.456,78(三位数组之间的点,最后一个逗号为2位数字)
示例:
100.000,00
50.000,00
50,00
34,34
etc.
我想要捕获50或更多的数字。因此,从上面的四个例子中,前三个应该匹配。
我想出了这个相当复杂的一个,我想知道是否有更简单的方法来做到这一点。
^(\d{1,3}[.]|[5-9][0-9]|\d{3}|[.]\d{1,3})*[,]\d{2}$
修改
我想在这里匹配大陆号码。由于内部规定并指定价格,这些数字具有此格式。 示例:1000欧元将写为1.000,00欧元 50000为50.000,00等。
答案 0 :(得分:1)
显然,这是一个品味问题,但使用否定前瞻提供了一个简单的解决方案。
^(?!([1-4]?\d),)[1-9](\d{1,2})?(\.\d{3})*,\d{2}\b
单词:从边界开始忽略所有以1位数或2位数开头的数字(第一位是1,2,3或4),后跟逗号。
答案 1 :(得分:0)
尝试:
编辑 <div style="width:100px; height:60px; border: 1px solid black; overflow-x: auto; font-size: 14px;float:left">
<div style="float:left;margin-right:10px">
<table border=1 cellpadding=10 style="float:left">
<th>Lorem</th><th>Ipsum</th><th>Sit</th><th>Dolor</th><th>Amet</th>
</table>
</div>
<div style="float:left;margin-right:10px">
<table border=1 cellpadding=10 style="float:left">
<th>Lorem2</th><th>Ipsum2</th><th>Si2t</th><th>Dolor2</th><th>Amet2</th>
</table>
</div>
</div>
检查是否:
^(.{3,}|[5-9]\d),\d{2}$
,
之前有2个数字,第一个在5到9之间,
和2个数字Donno如果它回答了你的问题,因为它会返回true:
但是这假设您的原始字符串是您期望的格式的数字(因为它不是您问题中的要求)。
编辑3
下面的正则表达式测试数字是否有效,参考大陆格式,如果它等于或大于50.请参阅tests here。
正则表达式:,
说明(d是数字):
^((([1-9]\d{0,2}\.)(\d{3}\.){0,}\d{3})|([1-9]\d{2})|([5-9]\d)),\d{2}$
:([1-9]\d{0,2}\.)
,d.
或dd.
一次,第一个ddd.
介于1和9之间。d
:(\d{3}\.){0,}
零或x时间ddd.
:\d{3}
3位这3个部分组合匹配任何等于或大于1000的数字,如:ddd
,1.000
或22.002
。
100.000.000
:100到999之间的任何数字。
([1-9]\d{2})
:5到9之间的数字,后跟一个数字。匹配50到99之间的任何内容。
所以它可以是上面的部分之一,也可以是这部分。
然后([5-9]\d))
匹配逗号和最后两位数字。
答案 2 :(得分:0)
我已命名所有内部组,以便更好地了解每个组匹配的数字部分。在了解其工作原理后,请将所有// Pin ParseQuery results
List<ParseObject> objects = query.find(); // Online ParseQuery results
ParseObject.pinAllInBackground(objects);
// Query the Local Datastore
ParseQuery<ParseObject> query = ParseQuery.get("Feed")
.fromLocalDatastore()
.whereEquals("starred", true)
.findInBackground(new FindCallback() {
public void done(List<ParseObject> objects, ParseException e) {
// Update UI
}
});
ParseObject feed = ParseQuery.get(objectId); // Online ParseQuery result
feed.fetch();
feed.put("starred", true);
// No network connectivity
feed.saveEventually();
ParseQuery<ParseObject> query = ParseQuery.get("Feed")
.fromLocalDatastore()
.whereEquals("starred", true)
.findInBackground(new FindCallback() {
public void done(List<ParseObject> objects, ParseException e) {
// "feed" ParseObject will be returned in the list of results
}
});
更改为?P<..>
。
这个是针对大陆格式的任何十进制数。
?:
这个与限制^(?P<common_int>(?P<int>(?P<int_start>[1-9]\d{1,2}|[1-9]\d|[1-9])(?P<int_end>\.\d{3})*|0)(?!,)|(?P<dec_int_having_frac>(?P<dec_int>(?P<dec_int_start>[1-9]\d{1,2}|[1-9]\d|[1-9])(?P<dec_int_end>\.\d{3})*,)|0,|,)(?=\d))(?P<frac_from_comma>(?<=,)(?P<frac>(?P<frac_start>\d{3}\.)*(?P<frac_end>\d{1,3})))?$
number>=50
如果你的整数部分总是低于999.999而分形部分总是2位数,那么它会更简单:
^(?P<common_int>(?P<int>(?P<int_start>[1-9]\d{1,2}|[1-9]\d|[1-9])(?P<int_end>\.\d{3})+|(?P<int_short>[1-9]\d{2}|[5-9]\d))(?!,)|(?P<dec_int_having_frac>(?P<dec_int>(?P<dec_int_start>[1-9]\d{1,2}|[1-9]\d|[1-9])(?P<dec_int_end>\.\d{3})+,)|(?P<dec_short_int>[1-9]\d{2}|[5-9]\d),)(?=\d))(?P<frac_from_comma>(?<=,)(?P<frac>(?P<frac_start>\d{3}\.)*(?P<frac_end>\d{1,3})))?$
答案 3 :(得分:0)
如果您可以保证数字正确形成 - 也就是说,预期正则表达式不会检测到5,0.1
无效,那么通过案例数量有限:
\d{3}
[5-9]\d
\d{3},
[5-9]\d,
实际上没有必要对\.
最简单的正则表达式是为每个单独的代码编写代码:
(\d{3}$|[5-9]\d$|\d{3},|[5-9]\d)
通过合并某些案例,可以使其更加紧凑和高效:
(\d{3}[$,]|[5-9]\d[$,])
如果您还需要验证格式,则需要额外的复杂性。我建议不要试图在一个正则表达式中进行这两种操作。
然而除非你有充分的理由不得不用正则表达式执行此操作,否则我建议不要这样做。将字符串解析为整数,并将其与50进行比较。