1

正規表現を教えてください。

  • 英数字のみ許可
  • 文字列全体で必ずハイフンを 1 つだけ使用してください
  • 文字列の前後にハイフンまたはスペースを使用することはできません
  • 連続するスペースまたはハイフンは使用できません。
  • ハイフンと 1 つのスペースは、互いに近くに存在することができます

有効 - 「123-Abc test1」、「test- me」、「abc slkh-hsds」
無効 - 「abc」、「 -hsdj sdsd hjds-」

同じことで私を助けてくれてありがとう。あなたの助けは大歓迎です

4

3 に答える 3

3
/^([a-zA-Z0-9] ?)+-( ?[a-zA-Z0-9])+$/

ここでデモを参照してください。

編集:

ハイフンの両側にスペースを入れることができない場合は、もう少しスペースを入れる必要があります。

/^([a-zA-Z0-9] ?)+-(((?<! -) )?[a-zA-Z0-9])+$/
                    ^^^^^^^^ ^

あるいは、否定後読みアサーションがサポートされていない場合 (JavaScript など)、同等の正規表現:

/^([a-zA-Z0-9]( (?!- ))?)+-( ?[a-zA-Z0-9])+$/
              ^ ^^^^^^^ ^
于 2012-08-02T18:28:06.393 に答える
2
  1. 英数字のみ (ハイフンとスペースを含めます。そうしないと意味がありません):

    ^[\da-zA-Z -]+$
    

    これは、文字列に一致し、すべての文字が指定されたセットに含まれていることを確認する主要部分です。つまり、数字と ASCII 文字、およびスペースとハイフン (これらの使用は次の部分で制限されます) です。

  2. ハイフンを 1 つだけ使用し、文字列の先頭または末尾にハイフンを使用しない:

    (?=^[^-]+-[^-]+$)
    

    これは、文字列が少なくとも 1 つの非ハイフン文字で開始および終了することを確認する先読みアサーションです。中間にはハイフンが 1 つ必要です。

  3. 先頭、末尾、または文字列にスペースを入れない:

    (?=^[^ ].*[^ ]$)
    

    上記と同様の先読みです。これらは 1 つにまとめることができますが、見た目がかなりごちゃごちゃしていて、説明が難しくなります。

  4. 連続するスペースはありません (連続するハイフンは上記の 2. によって既に除外されています):

    (?!.*  )
    

すべてを一緒に入れて:

(?!.*  )(?=^[^ ].*[^ ]$)(?=^[^-]+-[^-]+$)^[\da-zA-Z -]+$

クイック PowerShell テスト:

PS> $re='(?!.*  )(?=^[^ ].*[^ ]$)(?=^[^-]+-[^-]+$)^[\da-zA-Z -]+$'
PS> "123-Abc test1","test- m e","abc slkh-hsds"," abc ", " -hsdj sdsd hjds- " -match $re
123-Abc test1
test- m e
abc slkh-hsds
于 2012-08-02T18:32:52.197 に答える
1

次の正規表現を使用します。

^(.+-.+)[\da-zA-Z]+[\da-zA-Z ]*[\da-zA-Z]+$
于 2012-08-02T18:25:13.250 に答える