2017-02-05 8 views
1
1  #valid 
1,5 #valid 
1,5, #invalid 
,1,5 #invalid 
1,,5 #invalid 
     #'nothing' is also invalid 

コンマで区切られた数字の数は任意です。正規表現を使用してフォーマットされた数字を認識

私はこれを行うために正規表現を使用しようとしています。これは私がこれまで試してみましたものですが、それのどれも働いた:

"1,2,," =~ /^[[\d]+[\,]?]+$/  #returned 0 
"1,2,," =~ /^[\d\,]+$/   #returned 0 
"1,2,," =~ /^[[\d]+[\,]{,1}]+$/ #returned 0 
"1,2,," =~ /^[[\d]+\,]+$/   #returned 0 

を明らかに、私は1,2,,が無効であることを認識するために式を必要ですが、それらはすべて、本当に0 :(

答えて

3

あなたpatternsareをしませ返さワーキングので:

  • ^[[\d]+[\,]?]+$は - 、一つ以上の数字を含む行と一致し+,?文字(および上記のすべての文字列にマッチしますがラスT 1)
  • ^[\d\,]+$を空にする - 一つ以上の数字を含む行に一致し、+,{}文字
  • ^[[\d]+\,]+$ - - マッチ1+数字または記号,
  • ^[[\d]+[\,]{,1}]+$から成る行に一致1つまたは複数の数字、+、および,の文字を含む行。

基本的に、問題は、あなたが構造、(...)をグループ化を必要としているときに、文字クラスに依存しようということです。

カンマ区切り、全体の数字は

/\A\d+(?:,\d+)*\z/ 

で検証することができRubular demoを参照してください。

詳細

  • \A - 文字列の先頭
  • \d+ - 1+桁
  • (?:,\d+)* - の0回以上の繰り返し: - コンマ
    • ,\d+ - 1桁
  • \z - 文字列の最後。
+0

'[]'と '()'の違いは何ですか? – thestateofmay

+0

'[abc]'は 'a'、' b'または 'c'のいずれかの文字を1つ見つけます。 '(abc | def)'はリテラル文字列 'abc'または' def'のいずれかを見つけます。 '[...]'は文字クラス/ブラケット式であり、 '(...)'はグループ化された構造体です。 '(?:...)'は非捕捉グループです(マッチの一部を別のメモリバッファに格納しません)。 –

+0

'?:、'の文脈で ':'とは何ですか?私は '{1} :,'のように使ってみましたが、うまくいきませんでした。 – thestateofmay

関連する問題