regex 允许以.05为增量的十进制输入

zysjyyx4  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(104)

我正在尝试为Survey123写一个regrex表达式,它允许输入一个小数点后两位的数字,增量为.05(我正在重新利用一个前同事的代码,允许输入增量为.5)。我以前没有真正使用过regrex,理解它的语法有点困难。
我的工作路线是

regex(., '^\d{0,2}(?:.[0,5])?$')

字符串
它被设计为允许输入一个以.5为增量的数字,我将其修改为

regex(., '^\d{0,2}(?:.[0-9][0,5])?$')


以允许0.05的增量。但是,它只接受以5结尾的数字。例如,这允许9.15,但9.1或9.10是不可接受的(我希望它们是可接受的)。由于**[0,5]**在旧表达式中工作,并允许40,40.0或40.5,我认为它会工作,但有人能告诉我哪里出错了吗?

7uhlpewt

7uhlpewt1#

谢谢你的建议,它们对我不太起作用,但给了我更多的理解。是那个?然后将,交换为|,以生成十进制05之后的第二个字符。代码似乎给予了我我想要的是;

regex(., '^\d{0,2}(?:.[0-9][0|5]?)?$')

字符串
当涉及到regrex时,我仍然处于黑暗之中,但当我看到另一篇文章解释说[0-9]是小数点后的第一个字符时,它有助于形象化事情,我记下的[0,5]是小数点后的第二个字符-我希望第二个字符以0或5结尾,或者是可选的(你可以输入9.1而不是需要9.10)。
我很想用另一个函数来舍入输入,但我的同事们喜欢在表单上将输入限制为某些值。我们使用的是ArcGS survey 123表单,我正在后台编辑xlsx表单。将输入限制为一定范围内的值很容易,但是需要regrex以0.05的增量输入值。我们正在从一些项目合作伙伴那里收集数据,当事情不顺利时; t约束所有类型的值都可能被错误地输入,然后需要很长时间才能见底。

km0tfn4u

km0tfn4u2#

在标记后添加字符?以使其成为可选的。因此,要使[0,5]成为可选的,可以写[0,5]?。然后,整个正则表达式变为^\d{0,2}(?:.[0-9][0,5]?)?$

这个正则表达式中还有其他错误。字符.匹配任何字符,而不仅仅是一个字面上的句号,所以原始帖子不仅匹配40.5,还匹配40,540↨5,甚至4005(这可能是一个问题,因为你只需要两位数!)。您应该使用\.来只匹配文字句号。
[0,5]中的逗号将匹配一个文字逗号,因此9.1,将匹配。你应该使用[05]
[0-9]\d的意思是一样的,你应该在使用哪一个时保持一致。这不是一个错误,但它有点难以阅读。我喜欢\d,因为它更短。
所以,把所有这些放在一起,我得到... ^\d{0,2}(?:\.\d[05]?)?$

总而言之,你确定正则表达式是正确的方法吗?这显然是要转换成十进制数。为什么不先进行转换,然后检查得到的数字是否是0.05的倍数?这可能会更容易写。

相关问题