gpt4 book ai didi

PHP:用于包含 3-9 个字母和 5-50 个数字的字符串的正则表达式

转载 作者:可可西里 更新时间:2023-10-31 23:55:46 24 4
gpt4 key购买 nike

如何在 PHP 中制作一个只接受 3-9 个字母(大写)和 5-50 个数字的正则表达式?

我不太擅长正则表达式。但是这个不起作用:

/[A-Z]{3,9}[0-9]{5,50}/

例如,它匹配 ABC12345 但不匹配 A12345BC

有什么想法吗?

最佳答案

这是一个典型的“密码验证”类型的问题。为此,“粗略的方法”是先行检查每个条件,然后我们匹配所有内容。

^(?=(?:[^A-Z]*[A-Z]){3,9}[^A-Z]*$)(?=(?:[^0-9]*[0-9]){5,50}[^0-9]*$)[A-Z0-9]*$

我将在下面解释这个,但这里有一个变体,我会留给你去弄清楚。

^(?=(?:[^A-Z]*[A-Z]){3,9}[0-9]*$)(?=(?:[^0-9]*[0-9]){5,50}[A-Z]*$).*$

让我们一 block 一 block 地看第一个正则表达式。

  1. 我们将正则表达式锚定在字符串 ^ 的头部和字符串 $ 断言的结尾之间,确保匹配(如果有)是整个字符串。
  2. 我们有两种前瞻:一种用于大写字母,一种用于数字。
  3. 先行后,[A-Z0-9]* 匹配整个字符串(如果它只包含大写 ASCII 字母和数字)。 (感谢@TimPietzcker 指出我在方向盘上睡着了,因为那里有一个点星。)

前瞻如何工作?

(?:[^A-Z]*[A-Z]){3,9}[^A-Z]*$) 断言在当前位置,即字符串的开头,我们能够匹配“任意数量的非大写字母的字符,后跟一个大写字母”3 到 9 次。这确保我们有足够的大写字母。请注意 {3,9} 是贪心的,因此我们将匹配尽可能多的大写字母。但是我们不想匹配超过我们希望允许的数量,所以在表达式量化 {3,9} 之后,先行检查我们是否可以匹配“零个或任意数量”的字符不是大写字母,直到字符串结束,由 anchor $ 标记。

第二个 lookahead 以类似的方式工作。

为了更深入地解释这项技术,您可能需要仔细阅读本页关于 regex lookarounds 的密码验证部分。 .

如果您有兴趣,这里是对该技术的逐个标记的解释。

^                      the beginning of the string
(?= look ahead to see if there is:
(?: group, but do not capture (between 3 and 9 times)
[^A-Z]* any character except: 'A' to 'Z' (0 or more times)
[A-Z] any character of: 'A' to 'Z'
){3,9} end of grouping
[^A-Z]* any character except: 'A' to 'Z' (0 or more times)
$ before an optional \n, and the end of the string
) end of look-ahead
(?= look ahead to see if there is:
(?: group, but do not capture (between 5 and 50 times)
[^0-9]* any character except: '0' to '9' (0 or more times)
[0-9] any character of: '0' to '9'
){5,50} end of grouping
[^0-9]* any character except: '0' to '9' (0 or more times)
$ before an optional \n, and the end of the string
) end of look-ahead
[A-Z0-9]* any character of: 'A' to 'Z', '0' to '9' (0 or more times)
$ before an optional \n, and the end of the string

关于PHP:用于包含 3-9 个字母和 5-50 个数字的字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23426162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com