🗂️

TypeScript: 正規表現 使用例集

2024/08/22に公開

目的

たまにしか実装しないせいで、毎回「あれどうやって書くんだっけ?」となる正規表現。
最近珍しく複数回触れる機会があったので、正規表現を使った実装例を備忘録としてすこしずつ書き加えていきます。
実際には、正規表現の例というよりはそれぞれがどのようなルールの文字列かの備忘録という側面が強いかもしれません。

URLの表現方法など具体的なサンプル集としたい。

ファイル名 の正規表現

windowsではファイル名に使用できない文字が9種類(\,/,:,*,?,",<,>,|)あります。

const pattern = /[\\/:*?"<>|]/;
  • []: []内のいずれか任意の1文字と一致することを意味している。
  • \: エスケープ処理。

実装例: ファイル名に使用できない文字が含まれていないかチェックする

ファイル名のValueObjectが文字列を受け取った際に、それがファイル名として正しいかのvalidation実装で使用しました。
ファイルの拡張子を返す振る舞いを持たせた関係上、末尾が.txtなどの形式であることもついでにチェックしています。

  • バリデーション内容
    • ファイル名に使用可能な文字列であること
    • 末尾が. + 英数字からなること
function validation(input: string): void {
  const invalidCharacterPattern = /[\\/:*?"<>|]/;
  const fileExtensionPattern = /\.[A-Za-z0-9]+$/
  if (invalidCharacterPattern.test(input) || !fileExtensionPattern.test(input)) {
    throw new UnprocessableEntityException('ファイル名の形式ではありません。')
  }
}

※ macなどでも使用されることを想定するなら、ファイル名が.から始まらないこともチェックした方がよいです。

test() は RegExp インスタンスのメソッドで、正規表現と指定された文字列を照合するための検索を実行します。一致があった場合は true を、それ以外の場合は false を返します。

ULID の正規表現

ULIDは0~9の数字と、大文字・小文字アルファベット(I,L,Oを除く)からなる26文字の文字列です

const pattern = /^[0~9a~hjkmnp~zA~HJKMNP~Z]{26}$/gi;
  • {}:
  • g:
  • i:

実装例: ULID形式のチェック

ULIDのValueObjectが文字列を受け取った際に、それがULIDとして正しいかのvalidation実装で使用しました。

  • バリデーション内容
    • 文字数が26文字
    • 0~9の数字と I, L, Oを除くアルファベットA~Z(大文字・小文字)からなること
function validation(input: string): void {
  const ulidPattern = /^[0~9a~hjkmnp~zA~HJKMNP~Z]{26}$/gi;
  if (!ulidPattern.test(input)) {
    throw new UnprocessableEntityException('ULIDの形式ではありません。')
  }
}

Discussion