2011-02-04 5 views
7
  1. --(1回以上連続して)を禁止するにはどうすればよいですか?例えばab--c
  2. -は、単語の後ろには許可されません。 abc-
  3. -単語の先頭には許可されません。 -abc

^[A-Za-z0-9-]+$これまで私が持っていたものです。この正規表現を使用して正規表現で1つ以上のダッシュを連続して許可しないようにする

+1

2と3は許可されていますか? – BoltClock

+0

2と3は許可されていません – cometta

答えて

11
^(?!-)(?!.*--)[A-Za-z0-9-]+(?<!-)$ 

説明:

^    # Anchor at start of string 
(?!-)   # Assert that the first character isn't a - 
(?!.*--)  # Assert that there are no -- present anywhere 
[A-Za-z0-9-]+ # Match one or more allowed characters 
(?<!-)  # Assert that the last one isn't a - 
$    # Anchor at end of string 
+0

申し訳ありませんが、これはまたabd- –

+0

と一致しません@Sachin:それはしないでください。 OPには、彼が許可したくない3つの条件が列挙されています。 (もし彼が最初/最後にダッシュを許可したいのであれば、彼はなぜそれらをまったく言及しなかったのだろうか?) –

+0

Firefox 4のエラー'^ [^ - ] +(?!。* - )。+ [^ - ] + $ 'は働きます。 http://jsbin.com/ujoxu3でテスト済みです。 – Martijn

22

^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$

、ハイフンはばかりのグループ内で一致しています。このハイフンには、各側に[A-Za-z0-9]+サブ式が表示されます。このサブ式は1つ以上のアルファベット文字と一致するため、最初、最後、または別のハイフンの次にハイフンを一致させることはできません。

+0

それは賢いです!おそらく、すべての私のlookaroundものよりも理解しやすい。 –

+4

@Sachin:私はOPを理解するので、それはまさに彼が望むものです。しかし、彼はもっと明白かもしれない。 –

+0

@Tim - Eeeesshhh ...全く疑問を誤解しました。 @ブライアン - 絶対にこれは動作します。なぜ私は正規表現にマッチさせようとしていたのですか...ありがとう、申し訳ありません。 –

1
^[a-zA-Z0-9](?!.*--)[a-zA-Z0-9-]*[a-zA-Z0-9]$ 

^[a-zA-Z0-9]  /*Starts with a letter or a number*/ 
(?!.*--)   /*Doesn't include 2 dashes in a row*/ 
[a-zA-Z0-9-]* /*After first character, allow letters or numbers or dashes*/ 
[a-zA-Z0-9]$  /*Ends with a letter or a number*/ 

マッチ:

再プレイ/ 再プレイ編

がMATCていませんH:

Replay-/RE - 「 - 」場合は再生/ -Replay

0

文字列の先頭や末尾に許可されていない、あなたは、「一つ以上のalanumのシーケンスを探しています

/[0-9A-Z]+(-[0-9A-Z]+)+/ 

はシンプルな正規表現との貴重なモットーである「1以上alanumに続く1つのダッシュの1つ以上のグループ(複数可)が続きます。 (nota:小文字を検索するには、それを追加します。わかりやすくはありません)

関連する問題