GitHub の有効なユーザー名を正規表現で確認する(命名規約の確認)


GitHub 上の公開鍵やリポジトリなど、何かしら GitHub にリクエストする前に URL に含めるユーザー名が GitHub で有効なユーザー名かを正規表現でチェックしておきたい

「github ユーザー名 正規表現」でググってもドンピシャの記事が出てこなかったので、自分のググラビリティとして。

TL; DR (今北産業)

grep(-E)の正規表現
^[a-zA-Z0-9]([a-zA-Z0-9]?|[\-]?([a-zA-Z0-9])){0,38}$
javascript
/^[a-z\d](?:[a-z\d]|-(?=[a-z\d])){0,38}$/i
  • grep の動作をオンラインでみる @ paiza.IO
  • GitHub のユーザー名の命名ルール
    • alphanumeric(半角英数字) および -(ハイフン) であること。
    • 連続したハイフンは使えない。
    • ハイフンから始まる、もしくはハイフンで終わることはできない。
    • 39 文字以内であること。
  • 注意
    • help, about, pricing といった GitHub の予約語はチェックしません
    • 命名ルールは https://github.com/join の入力時に表示されるツールチップの内容から得たものです。公式ドキュメントは見つかりませんでした。

TS; DR

sh/bash/dash

githubUsernameRegex() {
    name_input="$1"
    regex='^[a-zA-Z0-9]([a-zA-Z0-9]?|[\-]?([a-zA-Z0-9])){0,38}$'
    echo "$name_input" | grep -E "$regex" 1>/dev/null
    return $?
}

githubUsernameRegex 'a'         # true
githubUsernameRegex 'A'         # true
githubUsernameRegex '0'         # true
githubUsernameRegex '00'        # true
githubUsernameRegex 'a-b'       # true
githubUsernameRegex 'a-b-123'   # true
githubUsernameRegex 'ab-123-cd' # true
githubUsernameRegex 'a-b-c-d-e' # true

githubUsernameRegex ''         # false
githubUsernameRegex 'a b'      # false
githubUsernameRegex 'a_b'      # false
githubUsernameRegex 'a--b'     # false
githubUsernameRegex 'a-b-'     # false
githubUsernameRegex '-a-b'     # false
githubUsernameRegex 'a-b-c-d-' # false
githubUsernameRegex '38aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'    # true
githubUsernameRegex '39aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'   # true
githubUsernameRegex '40aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'  # false
githubUsernameRegex '41aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' # false

Node.js/Javascript/npm/bower ユーザー なら githubUsernameRegex がおすすめ。

参考文献