【问题标题】:RegEx if then else for conditional test depending on first character [duplicate]RegEx if then else 根据第一个字符进行条件测试[重复]
【发布时间】:2021-11-18 13:54:53
【问题描述】:

我应该允许 2 种不同的输入字符串格式,每种格式都有自己的验证。 比如:

AA2222222222222222

2222222222222222

这意味着如果第一个字符是字母,我应该验证 ^[a-zA-Z]{2}\d{16}$。如果第一个字符是数字,我应该验证 d{16}。

我尝试用条件正则表达式编写它:

^(([a-zA-Z])(?([a-zA-Z])^[a-zA-Z]{2}\d{16}$|d{16})

但我得到一个模式错误,无法弄清楚到底是什么问题。

任何见解都会被欣赏

【问题讨论】:

标签: javascript regex


【解决方案1】:

我试图用条件正则表达式来写它

JavaScript 不支持 regular expression conditional syntax,因此 (?ifthen|else) 在 JavaScript 中不起作用。

这意味着如果第一个字符是字母,我应该验证 ^[a-zA-Z]{2}\d{16}$。如果第一个字符是数字,我应该验证 d{16}。

由于\d{16} 部分相同,您可以将[a-zA-Z]{2} 部分设为可选:

/^(?:[a-zA-Z]{2})?\d{16}$/

这在[a-zA-Z]{2} 周围使用了一个非捕获组,并通过它之后的? 使整个组成为可选。

如果验证不同(比如说,开头字母可能只有\d{14}),你可以使用替代:

/^(?:[a-zA-Z]{2}\d{14}|\d{16})$/

(当心陷阱:如果没有围绕交替的非捕获,^ 将是第一个替代方案的一部分,而不是第二个替代方案,$ 将是第二个替代方案的一部分,但不是首先。)

但在您的具体情况下,您不需要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2021-12-10
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2012-11-25
    相关资源
    最近更新 更多