2017-09-22 4 views
-1

3桁以下の任意の数値に一致するパターンが必要です。期間の後に2桁を超えない10進数を指定できます。数値は正または負にすることができます。受け入れられる最後の2つの値は、TRSまたはPCBのいずれかでなければなりません。私はこれらの2つの値の場合を無視したいと思います。したがって、ユーザータイプがTRSまたはtrsの場合は両方が受け入れられます。これまで私が持っているものは次のとおりです。HTML5パターンは数値(整数、浮動小数点数または負数)と一致します。TRSまたはPCBは大文字小文字を無視しますか?

[+-]?[0-9]+([\.][0-9]{0,2})[TRS][trs][PBC][pbc]? 

何らかの理由で私の数値は受け入れられません。誰かが助けてくれたら教えてください。ありがとうございました。

+0

あなたが期待される有効および無効な入力のリストを提供してもらえますか?また、文字列の特定の部分をキャプチャするか、まったく一致する必要がありますか? – CAustin

+0

いくつかのクイックポインタ: '[0-9]'は '\ d'に短縮できます。 '[\。]'は '[。]'と重複しています。実際には '\ .'で冗長です。使用している言語に応じて、大文字と小文字を区別しないスイッチ(通常はパターンの先頭で '(?i)')を有効にすることができます。これにより、最後の文字の方がずっとシンプルになります。 – CAustin

+0

@CAustin有効な値は、-999〜999の任意の数値です.DNTまたはCNTの完全一致文字列では、大文字と小文字は区別されません。それは理にかなっていますか?数値は10.56または956.45または-578.6のような小数です。 –

答えて

2

この正規表現を試してみてください:

^(?!\s*$)(?:TRS|PCB|[-]?999|[-]?(?:(?:[1-8]\d{2}|9\d[1-8]|[1-9]\d|\d)?(?:\.(?:0[1-9]|[1-9]\d))?))$ 

Click here for DEMO

説明:

  • ^ - 文字列
  • (?!\s*$)のスタート - 否定先読みは、文字列にマッチするのを避けるためにcontaini 0または0のみのスペース
  • (?:TRS|PCB|[+-]?999|[-+]?(?:(?:[1-8]\d{2}|9\d[1-8]|[1-9]\d|\d)?(?:\.(?:0[1-9]|[1-9]\d|[1-9]))?)) - TRSまたはPCBまたは必要な数値(下記の解説)のいずれかに一致します。それは大文字と小文字を区別しないようにするには、デモリンク
  • [-]?999に示すように、/iを使用 - 999
  • (?:[1-8]\d{2}|9\d[1-8]|[1-9]\d|\d)?続い-いずれかの0または1の出現にマッチ - 小数点の前に必要な3/2/1桁の番号と一致します。小数点から始まる値を持つことができるのでオプションです。
  • (?:\.(?:0[1-9]|[1-9]\d))? - 小数点以下2桁に一致します。積分値も一致させるためにオプションです。
  • $ - 文字列の最後
+0

HTML5パターンの小文字のTRSでこれを使用し、PCBが有効なものとして受け入れられない場合、非常に奇妙です... –

+0

@espresso_coffeeここに示すように、それらをOR( '|')リストに追加することができます:https:// regex101.com/r/WFg0ik/6 – Gurman

関連する問題