- 已关闭**。此问题需要details or clarity。当前不接受答案。
- 想要改进此问题?**添加详细信息并通过editing this post阐明问题。
16小时前关门了。
此帖子在11小时前编辑并提交审查。
Improve this question
我有一个<input type='number'/>
元素。
我想对提交事件触发时输入的数字执行转换。它也可以在另一个事件上:我愿意接受建议,但是转换不应该在用户输入时发生,而应该在他们完成输入时发生。
转换应如下所示:
1.删除所有前导零
1.删除所有结尾零
1.用一个或两个零替换所有其他连续的零(根据变量,应该是一个或两个)
例如:01002000400将转换为10204
第三条规则取决于布尔变量first_user
:如果为真,则所有内部连续零将转换为一个零,如果为假,则所有内部零将转换为两个零。
尝试
以下是我的尝试:
ref.value.replace('/^0+/', '')
为了同时删除结尾的零,我尝试了^0$
,但结果并不理想:没有效果。
我也不知道该怎么执行第三条规则。
我怎样才能做到这一点?
6条答案
按热度按时间uxh89sit1#
您可以通过一个
replace
调用来完成此操作。可以按以下顺序检查这三种情况:作为替换,输出由捕获组捕获的字符串。由于该组仅在第三种情况发生时捕获一个零,这实际上意味着所有其他零都将被删除。
我认为当数字正好为0时,必须引入该规则的一个例外。我猜您希望保留单个零。为了实现这一点,我将对前两个规则进行如下限制:
第三种情况现在也适用于输入仅由零组成的情况。
您可以使用
submit
事件,但使用change
事件可能也会很有趣:它不会在用户键入时触发,但会在用户"提交"值时触发,即当焦点移动到另一个元素、或选择另一个选项卡/窗口、或在输入小部件上使用向上/向下控件、或提交表单时...fwzugrvs2#
一个好的解决方案是实现一个简单的算法来完成你所需要的。
string.length-1
),直到找到一个非零的数字;这应该是一个非常简单的方法,并且比正则表达式更好用。对于
onSubmit
触发器,我认为它会工作得很好。我会使用onChange
并将其存储在一个隐藏字段中,但我认为onSubmit
会起到作用23c0lvtd3#
我想你想多了,要用一个版本的东西替换多个东西,你只需要定位一个或多个
things
,然后在replace函数中,用一个thing
替换实际上并不需要指定开头或结尾,只需要指定一个或多个
0
,然后替换为一个0
即可试试这个:
对于删除前导和尾随
0
的,可能有一个更好的方法,但在我的脑海中,这是我会做的:eoigrqb64#
也许一个简单的解决方案是创建一个在提交时运行的转换函数。
将用户响应转换为字符串还可以使您更容易地删除开始和结束“0”。如果这没有帮助,请提供更多信息,好吗?希望这会有所帮助。
ds97pgxw5#
你可以试试这个
gkn4icbw6#
'/^0+/'
,这不是使用正则表达式的真正方法,你应该删除字符串引号,并把你的正则表达式写在正斜杠/
内,就像/regex/
一样g
修饰符的情况下,需要使用regex修饰符