gpt4 book ai didi

php - 第一个和第二个字符的正则表达式规则

转载 作者:行者123 更新时间:2023-11-29 20:22:06 27 4
gpt4 key购买 nike

我在遵循 javascript 和 php 的正则表达式规则方面需要帮助。

JS

var charFilter = new RegExp("^[A|B].+[^0123456789]$");

PHP

if (!preg_match('/^[A|B].+[^0123456789]$/', $data_array['sample_textfield'])) {

这个正则表达式是关于

第一个字符必须以 A 或 B 开头,最后一个字符不能包含 0 到 9。

我有另一个验证,字符必须是最少 3 个字符和最多 6 个数字。

我要添加的新规则是,如果第一个字母是 A,第二个字符不能是 C。

这意味着

ADA(有效)ACA(无效)

所以我像这样更改了正则表达式代码

JS

var charFilter = new RegExp("^(A[^C])|(B).+[^0123456789]$");

PHP

if (!preg_match('/^(A[^C])|(B).+[^0123456789]$/', $data_array['sample_textfield'])) {

它适用于第一个和第二个字符。如果我输入

ACA(它说无效),但是如果我输入AD3(它说有效),它不再检查最后一个字符。最后一个字符不能包含 0 到 9 数字,但它显示为有效。

任何人都可以帮我修复正则表达式代码吗?非常感谢。

最佳答案

将您的所有要求放在一起,您似乎想要这种模式:

^(?=.{3,6}$)(?=A(?!C)|B).+\D$

即:

  • 从字符串^开始
  • 我们可以断言字符串 (?=.{3,6}$) 末尾有 3 到 6 个“任意”字符
  • 我们还可以断言它以A 开头后面没有 C , 或以 B 开头(?=A(?!C)|B)
  • 而且整个事情并没有以数字结尾 .+\D$

这将匹配 ( as seen on rubular.com ):

= match =         = no match =
ADA ACA
ABCD AD3
ABCDE ABCDEFG
ABCDEF
A123X
A X

请注意 .+ 允许使用空格和 \D .如果你坚持没有空格,你可以使用例如(?=\S{3,6}$)在模式的第一部分。

(?=…)前瞻;它断言可以匹配给定的模式。 (?!…)前瞻;它断言不能匹配给定的模式。

引用资料

相关问题


关于交替优先

原始模式的问题是误解了交替的优先级 |说明符。

考虑以下模式:

this|that-thing

此模式由两个替代项组成,一个匹配 "this" ,另一个匹配 "that-thing" .将此与以下模式进行对比:

(this|that)-thing

现在这个模式匹配 "this-thing""that-thing" , 感谢分组 (…) .巧合的是,它还创建了一个 capturing 组(它将捕获 "this""that" )。如果您不需要捕获功能,但需要分组方面,请使用非捕获组 ``(?:…)`。

另一个需要分组的例子是重复:ha{3}火柴"haaa" ,但是(ha){3}火柴"hahaha" .

引用资料

关于php - 第一个和第二个字符的正则表达式规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3474866/

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