javascript - 用于验证模式的正则表达式
问题描述
我是正则表达式的新手,在我的项目中,我允许用户以简写形式和完整数字形式输入金额,我使用材料 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]+/)
上面的代码第一个正则表达式验证模式,第二个正则表达式强制用户输入数字,因为数量不能以字符串开头,我写了两个单独的正则表达式,因为我不明白如何将它们放在一个正则表达式中,并且这些正则表达式不接受点之后数字。请任何人都可以提供一个完美的正则表达式来在一个正则表达式中验证上述模式吗?
提前致谢
解决方案
通过交替(从来都不是最漂亮的),它可以这样做:
^\d+([km]|\.|\.\d+[km])?$
查看在线演示
^
- 开始字符串锚。d+
- 一位或多位数字。(
- 打开捕获组(您可以使用非捕获)。[km]
- 单个字符“k”或“m”。|
- 交替(或)。\.?
- 一个字面点。|
- 交替(或)。\.\d+[km]
- 一个文字点,后跟至少一个数字和一个字符“k”或“m”。)?
- 关闭捕获组并使其可选
$
- 开始字符串锚。
推荐阅读
- c - 从虚拟地址中查找交换设备位置
- amazon-web-services - aws appsync graphql “'$[filter]' 的预期 JSON 对象,但得到了 'STRING'。”
- php - 为什么我必须经常收到此错误?
- python - Python中没有monad?
- java - 无法从 Java 中的不同模块解析类(Intellij)
- json - Arduino 和 Xojo 的 json 问题
- python - 如何在python中将一个字符串分成10个字母?
- python - 当我使用 estiamtor.train() 从检查点重新开始训练时,它会继续使用最后一批数据进行训练吗?
- reactjs - 如何调用更新反应上下文状态/或从非反应类调用方法?
- mysql - 我无法使用 sequelize 连接到 mysql