正则表达式允许空字符串

时间:2019-01-26 18:34:48

标签: javascript regex

我正在尝试使用一个正则表达式,其中一个数字可以格式化为两位小数,我已经能够实现这一点。但是我无法删除字符串中的第一个字符,因为如果没有匹配项,我的测试将失败。如何修改此正则表达式以支持删除整个值?

/^[0-9]+(\.([0-9]{1,2})?)?$/

https://codesandbox.io/s/k2qlq0w68r

3 个答案:

答案 0 :(得分:2)

对于您要执行的特定操作(输入验证),您可以完全避开正则表达式,而仅将<input type="number">1 - 2 1 - 2, 1 - 3 2 - 1 2 - 1, 2 - 4 3 - 1 4 - 2 一起使用:

step

您可以检查validity property来检查是否有不正确的地方。我相信类似<input type="number" step="0.01"> 的东西会给您您想要的东西。

另请参阅:Validating forms using JavaScriptForm Validation Part 2: The Constraint Validation API (JavaScript)


如果您仍然希望使用正则表达式,则将仅小数和部分非小数的情况分开可能会更容易:

document.getElementById("id").checkValidity()

这与以下数字匹配:/^(?:\d+(?:\.\d{0,2})?|\.\d{1,2})$/ 10012.510.8.51.67

但是拒绝以下内容:.0.032,[空​​字符串]

我建议您在用户键入数字后在 后运行验证,而不是像他们当前正在输入的那样。否则,他们将不可能输入. ,因为您的正则表达式会在按.01时拒绝它们。

答案 1 :(得分:0)

如果您想在点之前将小数点设为可选,则可以使用此正则表达式

^([0-9])?(?(1)(.([0-9]{1,2})?)?|(.[0-9]{1,2}))$

这是您想要的吗?

答案 2 :(得分:0)

如果您想要一个正则表达式也接受空字符串:

/^([0-9]+(\.([0-9]{1,2})?)?|)$/

但是我建议您不要在用户将其输入到您的输入中时假设输入是有效的,而是在用户完成编辑后(例如,通过使用松散焦点事件)验证该值。