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})?$^";
}

編集:

以下は、迅速なアカウントからの 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 の例は次のとおりです。

NOLADE21STS

OPSKATWW

正規表現は、文字列が次のコードで構成されている場合にのみ true を返す必要があります。その長さは 8 文字または 11 文字で、以下で構成されています。

銀行コード - 英字 4 文字 国コード - 2 文字 ロケーション コード - ゼロを除く 2 文字の英数字 支店コード - 3 文字の英数字

これらが仕様です。

したがって、長さは 11 または 8 のいずれかで、最初の 4 は何でもかまいません。次に 2 文字が必須で、次に 2 つの数字とオプションの 3 つの英数字です。

以下は無効です。

abcdefxx

abcdefxxyyy

これらも無効です。

aaaa11xx

aaaa11xxyyy

等々。

4

7 に答える 7

16

^区切り文字として使用していますか?おそらく、次のようなものが必要です。

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

パフォーマンスが不足しているため、これを使用することはお勧めしませんが、誰かが IBANS をISO-3366-1国コードに対しても検証する必要がある場合に備えて:

/^[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

Ok。この種の問題で同じ問題を抱えているすべての人にとって、正しい正規表現は次のとおりです。

/^[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 に答える