过滤可变长度的字母数字模式
Filtering for alphanumeric pattern with variable length
我想在“iban”列中查找无效的 IBAN 代码
就我而言,有效 IBAN 的要求是:
- 最小长度为 16,最大长度为 31
- 以两个严格的字母字符 A-Z 开头
- 接下来的两个位置(3 和 4)是严格的数字 0-9
- 字符串的其余部分必须是字母数字 A-Z 0-9,大小写无关紧要
第 1) 点到第 3) 点没有问题,但我不知道最后一个,因为它没有固定长度。
我正在使用 SQL 服务器。
到目前为止我有这个查询:
SELECT id, iban
FROM foo
WHERE NOT (
LEN(iban) BETWEEN 16 AND 31
AND iban LIKE '[A-Z][A-Z][0-9][0-9]%'
)
您可以添加第二个 LIKE
表达式,断言整个 IBAN 代码是字母数字:
SELECT id, iban
FROM foo
WHERE NOT (
LEN(iban) BETWEEN 16 AND 31 AND -- length 16-31
iban LIKE '[A-Z][A-Z][0-9][0-9]%' AND -- e.g. starts with AB12
iban NOT LIKE '%[^A-Za-z0-9]%' -- only alphanumeric
);
我想在“iban”列中查找无效的 IBAN 代码
就我而言,有效 IBAN 的要求是:
- 最小长度为 16,最大长度为 31
- 以两个严格的字母字符 A-Z 开头
- 接下来的两个位置(3 和 4)是严格的数字 0-9
- 字符串的其余部分必须是字母数字 A-Z 0-9,大小写无关紧要
第 1) 点到第 3) 点没有问题,但我不知道最后一个,因为它没有固定长度。
我正在使用 SQL 服务器。
到目前为止我有这个查询:
SELECT id, iban
FROM foo
WHERE NOT (
LEN(iban) BETWEEN 16 AND 31
AND iban LIKE '[A-Z][A-Z][0-9][0-9]%'
)
您可以添加第二个 LIKE
表达式,断言整个 IBAN 代码是字母数字:
SELECT id, iban
FROM foo
WHERE NOT (
LEN(iban) BETWEEN 16 AND 31 AND -- length 16-31
iban LIKE '[A-Z][A-Z][0-9][0-9]%' AND -- e.g. starts with AB12
iban NOT LIKE '%[^A-Za-z0-9]%' -- only alphanumeric
);