【问题标题】:Regex to permit only certain characters正则表达式只允许某些字符
【发布时间】:2018-07-12 10:18:28
【问题描述】:

我有一个至少匹配 1 个大写字母、1 个小写字母和 1 个数字的正则表达式:

"(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*"

我正在尝试修改为只允许使用下划线、美元符号或井号,_ $ £ 我不知道如何处理这个问题。这是不正确的:

"(?=.*\d)(?=.*[a-z_$£])(?=.*[A-Z]).*"

例如:

'Pa$$w0rd' - true
'orange1_' - false
'Apple22_' - true
'Banana100_!' - false

这个例子有什么问题?

【问题讨论】:

  • Powershell?你想添加另一个 required 模式吗?然后使用"^(?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=[^_$£]*[_$£]).*"
  • 您的意思是“只允许”还是“也允许”?还是“也需要”?
  • @tobias_k 也允许
  • @LightningWar 但是您的原始正则表达式已经允许这些,它只需要其他的。
  • 为什么Banana100_! 无效?存在 1 个高位、1 个低位、1 个数字、1 个 _

标签: regex


【解决方案1】:

您的正则表达式已经允许所有这些字符。如果我正确理解您的问题,您希望只允许那些特殊字符(字母和数字除外)。在这种情况下,您应该将正则表达式末尾的.* 更改为[\d\w$£]*_ 包含在\w 中):

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\d\w$£]*$

在线演示:https://regex101.com/r/6ZpaD2/2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多