【问题标题】:Regular Expression RegEx for no special characters and atleast one letter无特殊字符且至少一个字母的正则表达式 RegEx
【发布时间】:2020-03-24 18:05:24
【问题描述】:

我正在尝试创建一个不允许任何特殊字符但还需要至少一个字母(字母)才能通过的正则表达式。字母可以是大写或小写。

所需的通过和失败案例示例

  • Hello World - PASS
  • 你好世界 - 通过
  • 你好! - 失败
  • HELLO123 World - PASS
  • 12345 - 失败

我还想允许使用 - 和 _ 字符。

这是我迄今为止创建的:^(?=.*[A-Z]).{3,25}$

上述 RegEx 检查以确保表达式中存在字母,但我也想禁止特殊字符。

谁能解释我如何在同一个正则表达式中添加额外的检查?

【问题讨论】:

  • 究竟是什么让一个字符对您的用例特别?
  • 我指的不是字母数字,在这种情况下,- 和 _ 除外。谢谢。

标签: php regex expression


【解决方案1】:

如果您不想在开头或结尾允许- 或空格,您可以使用 2 个前瞻断言,1 个用于字符数,另一个用于断言 char A-Z。

^(?=[^A-Z]*[A-Z])(?=.{3,25}$)\w+(?:[\h-]\w+)*$

说明

  • ^ 字符串开始
  • (?=[^A-Z]*[A-Z]) 断言大写字符 A-Z
  • (?=.{3,25}$) 断言 3 - 25 个字符
  • \w+ 匹配 1+ 个单词字符
  • (?:[\h-]\w+)* 重复 0+ 次匹配水平空白字符或 -
  • $ 字符串结束

Regex demo

【讨论】:

    【解决方案2】:

    . 更改为允许的字符列表。比如:

    ^(?=.*?[A-Z])[\w\h-]{3,25}$
    

    https://regex101.com/r/j4wuUP/2/

    [\w\h-]
    

    (\w) 允许a-zA-Z0-9_、(\h) 水平空白和-s。 - 必须是第一个、最后一个或转义;否则它将创建一系列 ascii 字符。在非 PCRE 风味中,转义是不可能的,所以它必须是第一个或最后一个。

    【讨论】:

    • 谢谢你,这是正确的!惊人的例子。
    • 很好,如果这解决了您的问题,请记得接受它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 2015-03-12
    • 2015-01-18
    • 1970-01-01
    相关资源
    最近更新 更多