0

我尝试构建一个自定义RegExp模式,只允许输入数字,除了如果在这些数字之后输入了一些字母,它应该允许它们。不仅是在字母前没有输入数字的情况下。

所以我做了一个很小的正则表达式,但它甚至允许输入km字母在开头没有任何数字。那很糟...

有人能告诉我我哪里错了吗?

例子:

const matchPattern = new RegExp(/[^0-9(k|m)?]$/, 'gi')

'2323'.match(matchPattern) - // true
'23234k'.match(matchPattern) - // true
'23234m'.match(matchPattern) - // true
'k'.match(matchPattern) - // true, BUT should be false
'm'.match(matchPattern) - // true, BUT should be false
4

1 回答 1

1

如果您只能使用否定字符类,则可以使用:

^[^\D]+[^\W\d_a-jln-z]?$

正则表达式演示

  • ^字符串的开始
  • [^\D]+匹配除数字以外的任何字符的 1 次以上(匹配数字)
  • [^\W\d_a-jln-z]?可选匹配除单词以外的任何字符 char、digit、_ 或 az 范围,除了kandm
  • $字符串结束

const matchPattern = new RegExp("^[^\\D]+[^\\W\\d_a-jln-z]?$", "i");
console.log('2323'.match(matchPattern));
console.log('23234k'.match(matchPattern));
console.log('23234m'.match(matchPattern));
console.log('k'.match(matchPattern));
console.log('m'.match(matchPattern));

于 2020-01-21T11:11:06.607 回答