13

我为 php 函数 pregmatch 编写了一个正则表达式,如下所示:

^([a-zA-Z]){4}([a-zA-Z]){2}([0-9a-zA-Z]){2}([0-9a-zA-Z]{3})?$^

现在我需要检查 BIC 字符串的一致性。

它有问题……它总是正确的。我不知道为什么。

我使用的代码是这样的:

/**
 * Checks the correct format from the 
 * @param string $bic
 * @return boolean
 */
public function checkBic($bic)
{
    $bic = $this->cleanFromSeparators($bic);
    if (preg_match($this->getBicCompare(), $bic)) {
        return true;
    } else {
        return false;
    }
}

private function getBicCompare()
{
    return "^([a-zA-Z]){4}([a-zA-Z]){2}([0-9a-zA-Z]){2}([0-9a-zA-Z]{3})?$^";
}

编辑:

以下是 swift 帐户中 BIC 格式的一些参考:

http://www.sage.co.uk/sage1000v2_1/form_help/workingw/subfiles/iban_and_bic.htm

http://en.wikipedia.org/wiki/ISO_9362

http://www.swift.com/products_services/bic_and_iban_format_registration_bic_details?rdct=t

一个示例 BIC 将是:

诺拉德21STS

OPSKATWW

仅当字符串包含以下代码时,正则表达式才应返回 true:其长度为 8 个或 11 个字符,并且包括:

银行代码 - 4 个字母字符 国家代码 - 2 个字母 位置代码 - 2 个字母数字字符,零除外 分行代码 - 3 个字母数字字符

这些是规格。

所以长度可以是 11 或 8,前 4 可以是任何东西,然后 2 个字母是必须的,然后是 2 个数字和可选的 3 个字母数字。

以下内容无效:

abcdefxx

abcdefxxyyy

这些也是无效的:

aaa11xx

aaaa11xxyyy

等等。

4

7 回答 7

16

您正在^用作分隔符吗?您可能想要更多类似的东西:

'/^[a-z]{6}[0-9a-z]{2}([0-9a-z]{3})?\z/i'
于 2013-04-10T07:59:30.680 回答
8

结构

最新版本是 ISO 9362:2009(日期为 2009-10-01)。SWIFT 代码为 8 或 11 个字符,由以下部分组成:

4 个字母:机构代码或银行代码。

2 个字母:ISO 3166-1 alpha-2 国家代码

2 个字母或数字:位置代码

如果第二个字符是“0”,那么它通常是一个测试 BIC,而不是实际网络上使用的 BIC。如果第二个字符是“1”,那么它表示 SWIFT 网络中的被动参与者 如果第二个字符是“2”,那么它通常表示反向计费 BIC,其中收件人为消息付费,而不是更常见的发件人为消息付费的模式。

3 个字母或数字:分公司代码,可选(“XXX”代表主要办事处)

http://en.wikipedia.org/wiki/ISO_9362

(德语维基中的不同定义http://de.wikipedia.org/wiki/ISO_9362

2 个字母或数字:位置代码 第一个字符不能是数字“0”或“1”。字母“O”不允许作为第二个字符。(此定义的正则表达式:[2-9a-z][0-9a-np-z])

'/^[a-z]{6}[2-9a-z][0-9a-np-z]([a-z0-9]{3}|x{3})?$/i'
于 2013-09-27T18:13:49.740 回答
6

这是用于验证 BIC 的官方 SEPA 模式

[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}
于 2018-08-27T16:58:14.313 回答
2

我认为这个会做:

/^[a-z0-9]{4}[a-z]{2}\d{2}([a-z0-9]{3})?$/

那是:

  1. 字符串的开头,^
  2. 四个字母数字字符,[a-z0-9]{4}
  3. 两个数字,\d{2}
  4. 三个可选(?后缀)字母数字字符,([a-z0-9]{3})?
  5. 字符串的结尾,$

您可以在此处查看并对其进行测试(我使用了您的示例)。无论如何,根据您报告的规则,OPSKATWW它不应该是有效的 BIC,因为它在前 6 个字母后没有数字。

于 2013-04-10T14:07:15.350 回答
1

我不建议使用它,因为它缺乏性能,但如果有人需要根据ISO-3366-1国家代码验证 IBANS:

/^[A-Z]{4}(AC|AD|AE|AF|AG|AI|AL|AM|AN|AO|AQ|AR|AS|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BJ|BL|BM|BN|BO|BQ|BR|BS|BT|BV|BW|BY|BZ|CA|CC|CD|CE|CF|CG|CH|CI|CK|CL|CM|CN|CO|CP|CR|CS|CU|CV|CW|CX|CY|CZ|DD|DE|DG|DJ|DK|DM|DO|DZ|EA|EC|EE|EG|EH|ER|ES|ET|EU|FI|FJ|FK|FM|FO|FR|FX|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|IC|ID|IE|IL|IM|IN|IO|IQ|IR|IS|IT|JE|JM|JO|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MF|MG|MH|MK|ML|MM|MN|MO|MP|MQ|MR|MS|MT|MU|MV|MW|MX|MY|MZ|NA|NC|NE|NF|NG|NI|NL|NO|NP|NR|NT|NU|NZ|OM|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SF|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|SS|ST|SU|SV|SX|SY|SZ|TA|TC|TD|TF|TG|TH|TJ|TK|TL |TM|TN|TO|TP|TR|TT|TV|TW|TZ|UA|UG|UK|UM|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|XK|YE|YT|ZA|ZM|ZR|ZW)[2-9A-Z][0-9A-NP-Z](XXX|[0-9A-WYZ][0-9A-Z]{2})?$/i

这也是内容验证,而不仅仅是格式验证。但它会为您节省一些代码:)

于 2020-02-12T09:19:01.257 回答
0
echo preg_match('/^[A-Z]{4}(AC|AD|AE|AF|AG|AI|AL|AM|AN|AO|AQ|AR|AS|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BJ|BL|BM|BN|BO|BQ|BR|BS|BT|BV|BW|BY|BZ|CA|CC|CD|CE|CF|CG|CH|CI|CK|CL|CM|CN|CO|CP|CR|CS|CU|CV|CW|CX|CY|CZ|DD|DE|DG|DJ|DK|DM|DO|DZ|EA|EC|EE|EG|EH|ER|ES|ET|EU|FI|FJ|FK|FM|FO|FR|FX|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|IC|ID|IE|IL|IM|IN|IO|IQ|IR|IS|IT|JE|JM|JO|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MF|MG|MH|MK|ML|MM|MN|MO|MP|MQ|MR|MS|MT|MU|MV|MW|MX|MY|MZ|NA|NC|NE|NF|NG|NI|NL|NO|NP|NR|NT|NU|NZ|OM|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SF|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|SS|ST|SU|SV|SX|SY|SZ|TA|TC|TD|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TP|TR|TT|TV|TW|TZ|UA|UG|UK|UM|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|XK|YE|YT|ZA|ZM|ZR|ZW)[2-9A-Z][0-9A-NP-Z]([A-Z0-9]{3}|x{3})?$/',$val);
于 2020-03-25T14:07:20.573 回答
-2

好的。对于所有对此类问题有相同问题的人,正确的正则表达式是:

/^[0-9a-z]{4}[a-z]{2}[0-9a-z]{2}([0-9a-z]{3})?\z/i

你的@Qtax 提供它。我只是稍微改进了一下。

编辑调整是我改变了它,所以前 4 个字母可以是字母数字,但后面的 2 个字母必须代表一个国家的国际代码。这就是为什么只有字母。我与具有实际使用代码的实际用户进行了检查。它们可以在前 4 个位置具有数值。

编辑:

我错了。前 4 个不能只有字母。我正在转达 Reifeisen Bank 的一名员工的一份声明,当时我正在讨论该标准。原来他在想银行内部的号码,不知道什么系统不能是有效的代码。事实证明,情况并非如此。

所以正确的语法是

/^{6}[a-z]{2}[0-9a-z]{2}([0-9a-z]{3})?\z/i

将标记正确答案。谢谢你指出。

于 2013-04-10T10:55:40.193 回答