正则表达式匹配数字和字母或仅数字

3
我卡在编写正则表达式上,该正则表达式应满足以下条件:
  • 包含超过9位数字的字符串
  • 包含超过9位数字和字母的字符串
我无法想象如何编写正则表达式来表示数字或数字和字母匹配,但不能匹配字母。 这些字符串应匹配:
  • 12345678987654567
  • jhsjd4567hsqdgqsgh456786576567kj
  • 9l8j9n9k0n9n8n
这些字符串不应匹配:
  • loremipsum
  • a1
  • 12567
到目前为止,我的正则表达式是:/(?:\w){9,}/ 非常感谢 :)

2
在这一点上,你最好使用编程语言的逻辑。 - Parzh from Ukraine
(?:\w){9,} 等同于 \w{9,},它匹配九个或更多数字、字母或下划线/连接符标点符号。如果您需要在单词边界内匹配这些字符串,请在开头使用类似 (?=\w{0,8}[0-9]) 的前瞻,(?=\w{0,8}[0-9])\w{9,}\b(?=\w{0,8}[0-9])\w{9,}\b。请说明您需要匹配哪些边界。 - Wiktor Stribiżew
3个回答

2

使用\w可以匹配字母和数字,因此使用(?:\w){9,},也可以写成\w{9,},可以匹配只有字母或下划线的字符串。

阅读要求,您可以匹配9个或更多次字母或数字,并使用负向先行断言确保字符串不仅包含字母。

如果您想匹配超过9个,则可以使用{10,}作为量词。

^(?![a-zA-Z]+$)[a-zA-Z0-9]{9,}$

该模式匹配:

  • ^ 字符串的开头
  • (?![a-zA-Z]+$) 负向先行断言,确保字符串中不仅包含字符 a-z A-Z
  • [a-zA-Z0-9]{9,} 匹配 9 个或更多次字符 a-z A-Z 或数字
  • $ 字符串的结尾

正则表达式演示

或使用单词边界:

\b(?![a-zA-Z]+\b)[a-zA-Z0-9]{9,}\b

Regex demo


1
我将您的要求解释为:匹配一个包含超过九个字符的字符串,其中只包含数字或数字和字母的组合。

const tests = [
  '12345678987654567',
  'jhsjd4567hsqdgqsgh456786576567kj',
  '9l8j9n9k0n9n8n',
  'loremipsum',
  'a1',
  '12567',
];

for (const t of tests) {
  console.log(t.padEnd(35) +
    /^(?=.*\d)[a-z\d]{10,}$/i.test(t)
  )
}

正向预查 (?=.*\d) 确保字符串中至少有一个数字。
如果您只想匹配小写字母,请删除 i 标志。

0

我相信它应该可以工作

/([a-z]*[0-9][a-z]*){9,}/

这不会匹配 '9l8j9n9k0n9n8n',因为你的正则表达式要求至少有九个数字。另外,问题说明了“超过9个”,所以 {9,} 应该改为 {10,} - MikeM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接