0

次のような文字列を一致させる必要があります。

GQG6VJ6KTYTU-TIDM-564-5-P-Zなど

ハイフン-はオプションですが、少なくとも 1 つの英数字が必要です。

これまでのところ、私が思いついた最善の試みは[A-Z0-9-]+、単一のハイフンに誤って一致することです。

私も試し(?[-]*)(?[A-Z0-9]+)ましたが、うまくいきません(私は正規表現初心者です)。理由のボーナスポイント。

解決策は何ですか?

編集:

@ archeong87が最終的な解決策に導きました:^[A-Z0-9]+(-{0,1}[A-Z0-9]+)*$

4

4 に答える 4

2

これでうまくいくはずです:

([A-Z0-9]-?)*[A-Z0-9]
于 2012-10-15T14:53:43.743 に答える
1

正規表現パターンを使用

^[A-Z0-9-]*[A-Z0-9][A-Z0-9-]*$
 └───┬───┘ └───┬──┘└───┬───┘
     │         │       └ alphanumeric characters or hyphens (none or any)
     │         │
     │         └ one alphanumeric character
     │
     └ alphanumeric characters or hyphens (none or any)

また

^(?=[A-Z0-9-]*$).*[^-]
    └───┬───┘     └─┬┘
        │           └ non-hyphen
        │
        └ allowed characters
于 2012-10-15T15:00:43.527 に答える
0

使用する:

/^(?=.*[a-z\d])[a-z\d-]*$/i

i大文字のみが必要な場合は、大文字と小文字を区別しないことを意味します。

/^(?=.*[A-Z\d])[A-Z\d-]*$/
于 2012-10-15T14:56:59.263 に答える
0

あなたはかなり近かったです!

^(?=.*[A-Z0-9])[A-Z0-9-]+$
||             |         |
||             |         anchor your regex
||             |
||             what you were already doing
||
|lookahead assertion: at least 1 alphanumeric
|
anchor your regex

編集:

-先頭または末尾にいることを除外する方法を考えているときに、もっと簡単な解決策があることに気付きました。

^[A-Z0-9]+(-[A-Z0-9]+)*$

@AndreKRがこのアイデアを持っていたように見えるので、彼に+1してください。

于 2012-10-15T14:55:45.597 に答える