これは、私のシステムでユーザー名を検証するためのものです。
すべてのユーザー名にこれらの記号「.-_」を含めることができますが、言及された記号で区切られた単語を数字だけにすることはできません。
例は
無効:
123.as-as123
123.AS-aS123
有効:
a123.as-as123
A123.AS-aS123
これは、私のシステムでユーザー名を検証するためのものです。
すべてのユーザー名にこれらの記号「.-_」を含めることができますが、言及された記号で区切られた単語を数字だけにすることはできません。
例は
無効:
123.as-as123
123.AS-aS123
有効:
a123.as-as123
A123.AS-aS123
私があなたの要件を正しく理解していれば、これはうまくいくと思います:
/^(?:[a-z0-9]*[a-z][a-z0-9]*[.\-_])*[a-z0-9]*[a-z][a-z0-9]*$/i
、、、またはで終わり.
、少なくとも1文字を必要とする0個以上の文字/数字のグループに一致します。次に、文字/数字の最後のグループと一致し、少なくとも1つの文字が必要です。-
_
大文字と小文字は区別されないi
ため(これが最後に実行されます)、大文字にも一致します。(この構文は、少なくともPerlとPHPで機能します。他の言語では、このオプションを少し異なる方法で適用する必要がある場合がありますが、大文字と小文字は区別されません)。
次のように短くしたくなるかもしれません。
/^(?:[a-z0-9]*[a-z][a-z0-9]*[.\-_]?)+$/i
ただし、これはあまり望ましくありません。[.\-_]
オプションを作成すると、一致させる方法に柔軟性がありすぎるためです。おそらく、失敗したパターンで膨大な数のケースを実行する必要があります。
これらの4つの正規表現を使用して確認できます。
^([0-9]*?)[\.\-\_] // Check if number is present between start and symbols
[\.\-\_]([0-9]*?)[\.\-\_] // Check if number is present between these symbols
[\.\-\_]([0-9]*)$ // Check if number is present between these symbols and eol
^([0-9]+)$ // Check only if number is present
これらのいずれかの出力がne''の場合、無効、それ以外の場合は有効です。