Bash サブドメイン正規表現の検証が一致しません。

Bash サブドメイン正規表現の検証が一致しません。

ユーザーが入力したサブドメインが有効であることを確認しようとしていますが、何を渡しても機能しません。正規表現が大丈夫であることを知っているので、問題は "if"ロジックですが、シェル/bashは初めてです。

#!/bin/bash
#

echo Enter the subdomain\'s name to configure.
read SUBDOMAIN

if [[ ! $SUBDOMAIN =~ [A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])? ]]; then
    echo "$SUBDOMAIN is not a valid domain"
fi

例:
許可されています(通常のサブドメイン):テストは許可されていません
(無効なサブドメイン): - 許可されていません
(無効なサブドメイン):(null)許可されて
いません(無効なサブドメイン):#$? ?&@#&?$##$

私はシェルを使用することを好みますが、正規表現の括弧のためにスクリプトでエラーが発生します。

grepでできるかどうかはわかりませんが、grepの使い方をまったく理解しておらず、いつも混乱していました。

ベストアンサー1

「英数字」の後に「英数字またはダッシュ」を一致させ、最後にダッシュがなく、合計1..62文字にしたい場合は、このREが機能します。

^[[:alnum:]](([[:alnum:]]|-){0,61}[[:alnum:]])?$

これは文字列の先頭と末尾にバインドされているため、REは文字列全体と一致する必要があります。

  • 行の始まり^
  • 単一の英数字、大文字または小文字[[:alnum:]]
  • オプションのブロック(括弧で囲み(...)で終わる?
    • [[:alnum:]]またはダッシュ-、0〜60回繰り返し
    • [[:alnum:]]
  • 行末$

[[:alnum:]]この回答以下の説明で提案されているように、範囲が現在のロケールの影響を受けることを指摘する必要があります。 「ASCII」AZ、az、0-9のみが一致することを確認するには、で終わることを確認する必要がありますLANG=C。それ以外の場合、á é ø ßなどの他の文字が許可されることがあります。

おすすめ記事