0

次のルールに一致させたい:

  • 数字の先頭に1つのダッシュが許可されます。
  • 0から9までの値のみを許可する必要があります。

現在、次の正規表現パターンがあります。ルールに従わない一致を見つけたときに例外をスローできるように、逆を一致させています。

[^ -0-9]

このパターンの欠点は、文字列の中央にあるハイフンが引き続き通過することを除いて、すべての場合に機能することです。例えば:

「-2304923」は正しく許可されていますが、「9234-342」も許可されているため、許可されるべきではありません。

最初の文字を[^-0-9]、残りの文字を[^0-9]に指定する方法を教えてください。ありがとう!

4

4 に答える 4

2

この正規表現はあなたのために働きます:

^-?\d+$

説明:文字列^を開始してから-、オプション(?)、数字\dを数回繰り返し(+)、文字列はここで終了する必要があります$

于 2013-02-09T20:49:19.367 に答える
2

You can do this:

(?:^|\s)(-?\d+)(?:["'\s]|$)

 ^^^^^                        non capturing group for start of line or space
         ^^^^^                capture number
                 ^^^^^^^^^    non capturing group for end of line, space or quote 

See it work

This will capture all strings of numbers in a line with an optional hyphen in front.

-2304923"  "9234-342"   1234 -1234 
++++++++                                   captured
            ^^^^^^^^                       NOT captured
                        ++++               captured
                             +++++         captured
于 2013-02-09T20:51:48.540 に答える
1

あなたのパターンがどのように一致しているかわかりません-[^-0-9]あなたが話している文字列と一致しています。そのパターンはあなたが望むものの正反対です。最初にを使用して、文字クラスを単純に否定しcaret(^)ました。したがって、このパターンはとを除くすべてに一致hyphendigitsます。

とにかく、あなたの要件のために、最初にあなたは最初に1つを一致させる必要がありますhyphen。したがって、キャラクタークラスの外に置いてください。そして、後で任意の桁数に一致させるために、[0-9]+またはを使用できます\d+

したがって、必要な形式に一致するパターンは次のようになります。

-[0-9]+  // or -\d+

上記の正規表現は、大きな文字列のパターンを見つけるために使用されます。文字列全体をこのパターンに一致させたい場合は、正規表現の最後にアンカーを追加できます。-

^-[0-9]+$
于 2013-02-09T20:46:38.537 に答える
0

このような正規表現の場合、2つのケースで考えると役立つ場合があります。

  • 最初のキャラクターはどういうわけかめちゃくちゃですか?
  • そうでない場合、他のキャラクターのいずれかが何らかの形で台無しになっていますか?
  • これらを|

 (^[^-0-9]|^.+?[^0-9])

ここに画像の説明を入力してください

于 2013-02-09T21:34:11.493 に答える