Regex如何查找只包含大写字母的名称(强制),并且名称也可能包含数字、文字空格和连字符



如果我想同时找到"KFC", "EU 8RF"和IK-OTP,代码应该是什么样子?

我的代码是:
db.business.find({name:/^[A-Zs?d?-?]*$/}, {name:1}).sort({"name":1})

,但它将返回一个整数的名称,如1973,1999。我应该如何改进我的代码?TIA

使用前瞻来要求至少一个字母。

^(?=.*[A-Z])[A-Zds-]+$

演示

可以使用

^(?=[d -]*[A-Z])[A-Zd]+(?:[ -][A-Zd]+)*$

参见regex演示。

细节:

  • ^-字符串
  • 起始
  • (?=[d -]*[A-Z])-一个正向前看,要求在当前位置右侧的任何零个或多个数字,空格或连字符之后使用大写ASCII字母
  • [A-Zd]+-一个或多个大写ASCII字母或数字
  • (?:[ -][A-Zd]+)*-空格或-的零次或多次重复,然后是一个或多个大写ASCII字母或数字
  • $-字符串结束

最新更新