normalizeLawNum の仕様
INFO
houki-abbreviations v0.7.1 の specs/current/normalize_law_num/spec.md から自動生成しました(仕様 ID 16 件・2026-10-11)。手で編集しないでください。再生成は node scripts/generate-reference.mjs specs です。
法令番号の数字の書き方を算用数字に揃える
使いどころ・引数・実測の呼び出し例は、関数のページにあります。
最後に仕様が変わったのは v0.7.0 の「関数ごとの全角・ダッシュ類・大文字の扱いを揃える(T3 正規化)」(2026-09-30 承認)です。それまでの経緯は承認の履歴にあります。
利用者と得られる結果
この機能の利用者と、利用者が渡すもの・得られる結果を示します。
- このパッケージを import するコード(houki-hub family の MCP サーバーなど)。漢数字・算用数字・全角数字のどれで書かれた法令番号でも、照合に使う 1 つの文字列を受け取る。比べる 2 つの法令番号の両方にこの関数を通してから比べる
- このパッケージの中では
lookupByLawNumが、入力と辞書のlaw_numの両方にこの関数を通してから比べる
入力
呼び出すときに渡す値です。
| 引数 | 必須 | 内容 |
|---|---|---|
input | 必須 | 法令番号。例: 昭和二十五年法律第百三十七号 / 昭和25年法律第137号 / 昭和25年法律第137号 |
戻り値
呼び出しが返す値です。
string。次の順に変換した文字列。
| 順 | 変換 | 変換前 | 変換後 |
|---|---|---|---|
| 1 | normalizeJpText と同じ変換 | 全角数字・全角英字・ダッシュ類(- ‐ ‑ – — ― −)・~(U+FF5E)・〜(U+301C)・全角スペース | normalizeJpText の表のとおり。ダッシュ類は -(U+002D) |
| 2 | 空白を取り除く | すべての空白(半角スペース・タブ・改行など。前後も途中も) | なし |
| 3 | 元年を 1 年にする | 元年 | 1年 |
| 4 | 年・番号の位置にある漢数字を算用数字にする | 〇一二三四五六七八九十百千 が続いた並びのうち、直後が 年 か 号、直前が 第、直前か直後が -(順 1 で揃えたダッシュ)のどれかに当たるもの。kanjiToNumber で読める並びだけ | その値の算用数字。読めない並びと、どの位置にも当たらない並びはそのまま |
| 5 | 算用数字の先頭の 0 を取る | 算用数字の並び(0137) | 先頭の 0 を除いた並び(137)。0 だけのときは 0。桁数の上限は無い |
表に無い文字(元号、年 法律 第 号、省名、中黒 ・ など)は変えない。v0.6.1 まで順 6 にあった「ダッシュ類を半角ハイフンにする」は順 1 に含める。
扱わないこと
この機能が意図して扱わないことです。
- 元号の別表記(
S25/昭25)を元号名にすること、第や号を補うこと、法令の種別名(法律/政令)を補うこと(呼び出し側で揃える) - 万以上の単位を読むこと。
normalizeLawNum('第二万三千号')は'第二万3000号'になり、第23000号とは一致しない(kanjiToNumberが万を読まないため。二は万に隣り合うので変えない) - 元号を西暦にすること
- 法令番号として正しい形かを確かめること(どんな文字列でも変換して返す)
- 辞書から法令を引くこと(
lookupByLawNum)
処理の流れ
図の中の番号は「できること」の仕様 ID の末尾 3 桁です。
仕様項目
この機能の仕様項目を、仕様 ID ごとに並べています。見出しは仕様項目を 1 文で表したもので、条件・応答の細部・例は「詳細」を開くと読めます。仕様 ID はそれぞれ受入テストと対応していて、テストの無い ID があると各リポジトリの CI が止まります。
SPEC-ABBR-NORMALIZE-LAW-NUM-001 漢数字・算用数字・全角数字の法令番号を同じ文字列にする
詳細
年と番号の数字を算用数字にそろえる。漢数字は位取り(百三十七)でも位ごと(一三七)でもよい。全角数字は半角にする。
例: 次の 4 つはどれも '昭和25年法律第137号' を返す。
normalizeLawNum('昭和二十五年法律第百三十七号')normalizeLawNum('昭和25年法律第137号')normalizeLawNum('昭和25年法律第137号')normalizeLawNum('昭和二五年法律第一三七号')
SPEC-ABBR-NORMALIZE-LAW-NUM-002 空白をすべて取り除く
詳細
前後だけでなく途中の空白も取り除く。
例: normalizeLawNum(' 昭和25年 法律 第137号 ') は '昭和25年法律第137号'。
SPEC-ABBR-NORMALIZE-LAW-NUM-003 算用数字の先頭の 0 を取る
詳細
例: normalizeLawNum('昭和25年法律第0137号') は '昭和25年法律第137号'。
SPEC-ABBR-NORMALIZE-LAW-NUM-004 元年を 1 年にする
詳細
元年 を 1年 にする。
例: normalizeLawNum('令和元年法律第一号') は '令和1年法律第1号'、normalizeLawNum('平成元年法律第四十二号') は '平成1年法律第42号'。
SPEC-ABBR-NORMALIZE-LAW-NUM-005 人事院規則の番号のダッシュを半角ハイフンにする
詳細
戻り値の表の順 1 でダッシュ類を - にする。人事院規則の番号(一―一)はこれで 1-1 になる。ダッシュの直前・直後の漢数字も算用数字にする。
例: normalizeLawNum('昭和二十四年人事院規則一―一') は '昭和24年人事院規則1-1'、normalizeLawNum('昭和三十五年人事院規則九―三〇') は '昭和35年人事院規則9-30'、normalizeLawNum('昭和二十四年人事院規則二―〇') は '昭和24年人事院規則2-0'。
SPEC-ABBR-NORMALIZE-LAW-NUM-006 番号の無い法令番号も年の数字を揃える
詳細
第…号 の無い法令番号(憲法・勅令など)も、年の数字を算用数字にする。
例: normalizeLawNum('昭和二十一年憲法') は '昭和21年憲法'、normalizeLawNum('明治十九年勅令') は '明治19年勅令'。
SPEC-ABBR-NORMALIZE-LAW-NUM-007 数字以外の語は変えない
詳細
元号・法令の種別名・省名・中黒 ・ は変えない。共同省令の長い種別名もそのまま残る。
例: normalizeLawNum('平成十五年内閣府・総務省・財務省・厚生労働省・農林水産省・経済産業省・国土交通省令第三号') は '平成15年内閣府・総務省・財務省・厚生労働省・農林水産省・経済産業省・国土交通省令第3号'。
SPEC-ABBR-NORMALIZE-LAW-NUM-008 元号の別表記と「第」「号」の省略は揃えない
詳細
元号の別表記(S25 / 昭25)を元号名にすることと、第 や 号 の有無をそろえることはしない。書き方が違えば、戻り値も違う文字列のまま。
例: normalizeLawNum('S25年法律第137号') は 'S25年法律第137号'。normalizeLawNum('昭和25年法律137号') は '昭和25年法律137号' で、normalizeLawNum('昭和25年法律第137号') と一致しない。
SPEC-ABBR-NORMALIZE-LAW-NUM-009 空文字には空文字を返す
詳細
input が空文字のときは '' を返す。
SPEC-ABBR-NORMALIZE-LAW-NUM-010 読めない漢数字の並びはそのまま残す
詳細
kanjiToNumber が null を返す漢数字の並びは、算用数字にせず元の文字のまま残す。同じ入力の中の読める並びは算用数字にする。
例: normalizeLawNum('昭和十十年法律第一号') は '昭和十十年法律第1号'。
SPEC-ABBR-NORMALIZE-LAW-NUM-011 空白で分かれた元年も 1 年にする
詳細
空白を取り除いてから 元年 を 1年 にするので、元 と 年 のあいだや前後に空白があっても 1年 になる。
例: normalizeLawNum('令和 元 年法律第一号') は '令和1年法律第1号'。
SPEC-ABBR-NORMALIZE-LAW-NUM-012 U+2015 以外のダッシュ類も半角ハイフンにする
詳細
‐(U+2010)、‑(U+2011)、–(U+2013)、—(U+2014)、−(U+2212)も、―(U+2015)と同じく - にする。
例: normalizeLawNum('昭和二十四年人事院規則一‐一')、normalizeLawNum('昭和二十四年人事院規則一‑一')、normalizeLawNum('昭和二十四年人事院規則一–一')、normalizeLawNum('昭和二十四年人事院規則一—一')、normalizeLawNum('昭和二十四年人事院規則一−一') はどれも '昭和24年人事院規則1-1'。
SPEC-ABBR-NORMALIZE-LAW-NUM-013 罫線と長音は半角ハイフンにしない
詳細
罫線 ─(U+2500)と長音 ー(U+30FC)はダッシュ類として扱わず、変えない。
例: normalizeLawNum('昭和二十四年人事院規則一─一') は '昭和24年人事院規則一─一'(漢数字は罫線の隣なので変えない。SPEC-ABBR-NORMALIZE-LAW-NUM-015)、normalizeLawNum('昭和二十四年人事院規則一ー一') は '昭和24年人事院規則一ー一'。
SPEC-ABBR-NORMALIZE-LAW-NUM-014 null と undefined には空文字を返す
詳細
input が null または undefined のときは '' を返す。
例: normalizeLawNum(null) も normalizeLawNum(undefined) も ''。
SPEC-ABBR-NORMALIZE-LAW-NUM-015 年・番号の位置に無い漢数字は変えない
詳細
漢数字の並びを算用数字にするのは、直後が 年 か 号、直前が 第、直前か直後がダッシュ(- に揃えた後)のどれかのときだけ。地名や語の一部にある漢数字は変えない。
例: normalizeLawNum('千葉県条例第一号') は '千葉県条例第1号'(v0.6.1 では '1000葉県条例第1号')。normalizeLawNum('三重県') は '三重県'。normalizeLawNum('平成十五年一般法律第三号') は '平成15年一般法律第3号'(一般 の 一 は変えない)。normalizeLawNum('昭二五・一〇・二五') は '昭二五・一〇・二五'(年 第 号 ダッシュのどれにも隣り合わない)。
SPEC-ABBR-NORMALIZE-LAW-NUM-016 桁数の大きい算用数字も丸めない
詳細
算用数字の先頭の 0 を取るときに、桁数によらず並びをそのまま残す。数値に変換して丸めることはしない。
例: normalizeLawNum('昭和25年法律第12345678901234567890号') は '昭和25年法律第12345678901234567890号'(v0.6.1 では '昭和25年法律第12345678901234567000号')。normalizeLawNum('昭和25年法律第00012345678901234567890号') も同じ文字列。
実装する人に向けた情報
ここから下は、この機能を実装する人と、仕様の変更を追う人に向けた節です。使い方を知りたいだけなら、読まなくて構いません。
検討中のこと
仕様を書き起こしたときに見つかった項目のうち、扱いを Issue で検討しているものです。ここに挙げたことは、今後の版で変わることがあります。開くと、元の仕様書の記述をそのまま読めます。
仕様書の「未決」の節
初版起こしで見つけた、意図か不具合かを人が決める項目です。決まったら「できること」に ID を振るか、specs/changes/ の差分にします。
意図か不具合かの判断が要る項目は houki-abbreviations の Issue に移し、ここには題と Issue の番号だけを残します。今の振る舞いのままでよくテストが無いだけの項目は、受入テストを書いてから「できること」に ID を振ります。
- 数字でない語の中の漢数字も算用数字になる。 → SPEC-ABBR-NORMALIZE-LAW-NUM-015
- 読めない漢数字の並びはそのまま残す。 → SPEC-ABBR-NORMALIZE-LAW-NUM-010
元年は場所を問わず1年になる。 → SPEC-ABBR-NORMALIZE-LAW-NUM-011- ダッシュ類のうちテストがあるのは
―(U+2015)だけ。 → SPEC-ABBR-NORMALIZE-LAW-NUM-012、SPEC-ABBR-NORMALIZE-LAW-NUM-013 - 桁数の大きい算用数字で値が変わる。 → SPEC-ABBR-NORMALIZE-LAW-NUM-016
null/undefinedを渡したとき。 → SPEC-ABBR-NORMALIZE-LAW-NUM-014
承認の履歴
この機能の仕様が、いつ、どの変更で承認されたかを新しい順に並べています。各リポジトリの npx spec-ids history normalize_law_num と同じ内容です。変更の名前から、変更の理由と前後の振る舞いを書いた文書(GitHub)を開けます。
承認の履歴(4 件)
| 承認日 | 版 | 変更 | 仕様 PR |
|---|---|---|---|
| 2026-09-30 | v0.7.0 | 関数ごとの全角・ダッシュ類・大文字の扱いを揃える(T3 正規化) | #30 |
| 2026-09-27 | v0.6.1 | テストが無いだけの振る舞いに仕様 ID を振る | #27 |
| 2026-09-27 | v0.6.1 | 「未決」のうち判断が要る 52 件を Issue に移す | #26 |
| 2026-09-27 | — | 初版 | #10 |
関連ページ
このページの元になった文書と、あわせて読むページです。