首页 > 解决方案 > 用于验证模式的正则表达式

问题描述

我是正则表达式的新手,在我的项目中,我允许用户以简写形式和完整数字形式输入金额,我使用材料 UI TextField 进行输入。

例子是:

400k - shorthand, 

400.2k - shorthand, 

4m - shorthand,

500. - should work

500000 - full amount

一些模式用户不应该被允许输入示例是:

4.2.k, 

.3k, 

4...k

300.k

我写了下面的正则表达式,但它确实允许在数字后输入点。

textValue.match(/^[0-9]*(\.[0-9]{0,2})*([0-9km]{1})$/) && textValue.match(/^[\d]+/)

上面的代码第一个正则表达式验证模式,第二个正则表达式强制用户输入数字,因为数量不能以字符串开头,我写了两个单独的正则表达式,因为我不明白如何将它们放在一个正则表达式中,并且这些正则表达式不接受点之后数字。请任何人都可以提供一个完美的正则表达式来在一个正则表达式中验证上述模式吗?

提前致谢

标签: javascriptregexreactjsvalidationmaterial-ui

解决方案


通过交替(从来都不是最漂亮的),它可以这样做:

^\d+([km]|\.|\.\d+[km])?$

查看在线演示

  • ^- 开始字符串锚。
  • d+- 一位或多位数字。
  • (- 打开捕获组(您可以使用非捕获)。
    • [km]- 单个字符“k”或“m”。
    • |- 交替(或)。
    • \.?- 一个字面点。
    • |- 交替(或)。
    • \.\d+[km]- 一个文字点,后跟至少一个数字和一个字符“k”或“m”。
    • )?- 关闭捕获组并使其可选
  • $- 开始字符串锚。

在此处输入图像描述


推荐阅读