我正在尝试为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,我认为它会工作,但有人能告诉我哪里出错了吗?
2条答案
按热度按时间7uhlpewt1#
谢谢你的建议,它们对我不太起作用,但给了我更多的理解。是那个?然后将
,
交换为|
,以生成十进制0或5之后的第二个字符。代码似乎给予了我我想要的是;字符串
当涉及到regrex时,我仍然处于黑暗之中,但当我看到另一篇文章解释说[0-9]是小数点后的第一个字符时,它有助于形象化事情,我记下的[0,5]是小数点后的第二个字符-我希望第二个字符以0或5结尾,或者是可选的(你可以输入9.1而不是需要9.10)。
我很想用另一个函数来舍入输入,但我的同事们喜欢在表单上将输入限制为某些值。我们使用的是ArcGS survey 123表单,我正在后台编辑xlsx表单。将输入限制为一定范围内的值很容易,但是需要regrex以0.05的增量输入值。我们正在从一些项目合作伙伴那里收集数据,当事情不顺利时; t约束所有类型的值都可能被错误地输入,然后需要很长时间才能见底。
km0tfn4u2#
在标记后添加字符
?
以使其成为可选的。因此,要使[0,5]
成为可选的,可以写[0,5]?
。然后,整个正则表达式变为^\d{0,2}(?:.[0-9][0,5]?)?$
这个正则表达式中还有其他错误。字符
.
匹配任何字符,而不仅仅是一个字面上的句号,所以原始帖子不仅匹配40.5
,还匹配40,5
,40↨5
,甚至4005
(这可能是一个问题,因为你只需要两位数!)。您应该使用\.
来只匹配文字句号。[0,5]
中的逗号将匹配一个文字逗号,因此9.1,
将匹配。你应该使用[05]
。[0-9]
和\d
的意思是一样的,你应该在使用哪一个时保持一致。这不是一个错误,但它有点难以阅读。我喜欢\d
,因为它更短。所以,把所有这些放在一起,我得到...
^\d{0,2}(?:\.\d[05]?)?$
个总而言之,你确定正则表达式是正确的方法吗?这显然是要转换成十进制数。为什么不先进行转换,然后检查得到的数字是否是0.05的倍数?这可能会更容易写。