環境
- JavaScript
やりたいこと
2024年1月以降に新規上場した銘柄から、証券コードに英文字が混じるようになった。
従来は「数字4桁」という単純なルールだったので、バリデーションも /^\d{4}$/ で事足りていた。しかし新ルール対応が必要になったので、旧来の数字4桁コードと新しい英数字混在コードの両方にマッチする正規表現が必要となるのでメモ。
コード
まず新しい証券コードのルールを整理する。
- 4桁構成は変わらない
- 1桁目と3桁目は必ず数字
- 2桁目と4桁目は「数字」または「英大文字」
- 英大文字は数字と見間違えやすい
B、E、I、O、Q、V、Zの7文字を除いた19文字(A, C, D, F, G, H, J, K, L, M, N, P, R, S, T, U, W, X, Y)のみ使用可
このルールに対応した正規表現がこれだ。
^[1-9][0-9ACDFGHJKLMNPRSTUWXY][0-9][0-9ACDFGHJKLMNPRSTUWXY]$
各パートの意味はこうなる。
^[1-9]: 証券コードは1300番台から始まるため1桁目は1〜9の数字のみ。0始まりは存在しない[0-9ACDFGHJKLMNPRSTUWXY]: 2桁目と4桁目。数字か許可された英大文字のどちらか[0-9]: 3桁目は従来通り必ず数字
JavaScriptで使う場合はこうなる。
const stockCodeRegex = /^[1-9][0-9ACDFGHJKLMNPRSTUWXY][0-9][0-9ACDFGHJKLMNPRSTUWXY]$/; // 旧来の数字4桁コード console.log(stockCodeRegex.test('7203')); // true (トヨタ) // 新形式の英数字混在コード console.log(stockCodeRegex.test('456A')); // true (HUMAN MADE) // 無効なコード(禁止文字Iを含む) console.log(stockCodeRegex.test('2I3C')); // false
なお、証券会社のアプリや検索フォームで小文字入力も受け付けたい場合は i フラグを付けるか、文字クラスに小文字も追加すればいい。
// iフラグで大文字小文字を無視する場合 const stockCodeRegexCI = /^[1-9][0-9ACDFGHJKLMNPRSTUWXY][0-9][0-9ACDFGHJKLMNPRSTUWXY]$/i; console.log(stockCodeRegexCI.test('2a3c')); // true