2

次の正規表現を使用して、ユーザー名の HTML テキスト入力を検証する([a-zA-Z0-9//._-]{3,12}[^//._-])ように使用しますが、文字列に次のいずれかのみが含まれていることを確認するように指示する方法があるのでしょうか:pattern="([a-zA-Z0-9/._-]{3,12}[^/._-])".-_

つまり、次のことを達成する正規表現が必要だということです(可能であれば)

  • alex-how =>有効
  • alex-how.=> で終了するため、無効です。.
  • alex.how=>有効
  • alex.how-ha=> 無効です。すでに.
  • alex-how_da=> 無効です。すでに-

私の現在の正規表現の問題は、何らかの理由で、文字列の末尾にある ではない任意の文字を受け入れ、その理由を._-理解できないことです。

もう 1 つの問題は、許可された特殊文字のみが含まれていることを確認しないことです。

何か案は?

4

6 に答える 6

3

これを試してください:

^(?!(.*[.|_|-].*){2})(?!.*[.|_|-]$)[a-zA-Z0-9//._-]{3,12}$

正規表現リンク. 上記の正規表現では、 、またはの最大1 つが許可されます。._-

于 2013-06-10T23:15:45.673 に答える
1

必要なのは、大文字、小文字、および数字のすべての文字の後に、「-」、「.」、または「_」の文字が 1 つまたはまったく含まれず、その後に少なくとも 1 つの文字が続く 1 つまたは複数の文字列です。

^[a-zA-Z0-9]+[-|_|\.]{0,1}[a-zA-Z0-9]+$ 
于 2013-06-10T23:07:03.380 に答える
1

これがうまくいくことを願っています:-

文字で始まり、その後に (-,.,_) が続き、その後に文字で終わると書かれています

^[\w\d]*[-_\.\w\d]*[\w\d]$
于 2013-06-10T22:53:41.660 に答える
1
^(?=[a-zA-Z0-9/._-]{3,12}$)[a-zA-Z0-9]+(?:[/._-][a-zA-Z0-9]+)?$

または、JavaScript 正規表現リテラルとして:

/^(?=[a-zA-Z0-9\/._-]{3,12})[a-zA-Z0-9]+(?:[\/._-][a-zA-Z0-9]+)?$/
  • 先読み は(?=[a-zA-Z0-9/._-]{3,12}$)、全長の検証を行います。
  • 次に[a-zA-Z0-9]+、名前が少なくとも 1 つの非区切り文字で始まることを確認します。
  • セパレーターがある場合は、(?:[/._-][a-zA-Z0-9]+)?その後に少なくとも 1 つの非セパレーターがあることを確認します。

/正規表現では特別な意味を持たないことに注意してください。正規表現リテラルを使用している場合にのみエスケープする必要があり (/は正規表現の区切り文字であるため)、別のスラッシュではなくバックスラッシュを前に付けてエスケープします。.また、文字クラス内では、ドット ( ) をエスケープしてリテラル ドットと一致させる必要はありません。

于 2013-06-10T23:57:38.603 に答える
0

正規表現のドットには、「ここの任意の文字」という特別な意味があります。

リテラルのドットを意味する場合は、正規表現パーサーにそのように伝えるためにエスケープする必要があります。

正規表現範囲のエスケープドット

于 2013-06-10T22:53:32.307 に答える