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

标签 php javascript regex

我需要有关遵循 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/

相关文章:

php - Twitter api 1.1 oauth 在搜索主题标签时失败

php - Wordpress wp_editor 不更新文本区域 $_POST 数据

javascript - 如何将单选下拉菜单与单选按钮绑定(bind)?

regex - R 正则表达式用于最后一个反斜杠和最后一个点之间的所有内容

c# - 用于捕获标记和未标记内容的正则表达式

javascript - 如何使用 javascript 发布包含文件类型参数的表单

php - 初学者PHP问题: What the difference between $_POST and $_FILES?

javascript - 从 SQL 数据库获取多列并以 HTML 形式显示的最佳方法?

JavaScript "classList"切换不切换元素的类名

python - Django URL 正则表达式出现类型错误