我需要有关遵循 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'])) {
它适用于第一个和第二个 Angular 色。如果我输入
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"
,感谢分组 (…)
。巧合的是,它还创建了一个捕获组(它将捕获 "this"
或 "that"
)。如果您不需要捕获功能,但需要分组方面,请使用非捕获组“(?:…)”。
另一个需要分组的例子是重复:ha{3}
匹配"haaa"
,但是(ha){3}
匹配"hahaha"
.
引用文献
关于php - 第一个和第二个字符的正则表达式规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3474866/