2009-06-15 8 views
3

英国通貨(すなわち、£13.00、£9,999.99、および£12,333,333.02)と一致する正規表現の後には、負の(£2.17)またはゼロの値または0)。英国の通貨の正規表現JavaScriptの

私は自分自身を作成し​​ようとしましたが、私は正しいミッドレンジに入っています!

大変助かりました。

ありがとうございます!

答えて

5

これは(もほとんどが...)

/^£?[1-9]{1,3}(,\d{3})*(\.\d{2})?$/ 

が負または他の文字が文字列ではなく、カンマが使用されることを前提として確認するために、^と$を活用し、それをやります。ポンド記号とペンスはオプションです。

編集:上記の£0.01とは一致しません指摘されています:あなたは非ゼロので、[1-9]

更新と最初の\ dを置き換えると述べ実現しました。以下の改善になりますが、ここでは、[1-9] /最初とそれ以降をテストするほうがかなり複雑かもしれませんが、それをベンチマークしませんでした。

/^£?(([1-9]{1,3}(,\d{3})*(\.\d{2})?)|(0\.[1-9]\d)|(0\.0[1-9]))$/ 

簡単な説明:

  • 次に一致する文字列の

    • マッチ始まり、オプションに続く "£" いずれか:カンマ区切りのための可能性を秘めた
      • >£1量グループ分けおよび任意のペンス
      • または<£=£0.10 amou NT
      • OR
    • は、行の末尾に一致< =£0.09量

    (上記でゼロ)ペンスの複数のフラクションあなたはあまり効率的ではそれがなる正規表現に追加する必要。

    /^£\d{1,3}(,\d{3})*(\.\d{2})?$/ 
    

    形式を検証するために、そして

    /[1-9]/ 
    

    は、少なくとも1桁がゼロでないことを確認する:

  • +2

    約0.50?それは一致しません... –

    +0

    @Tim - よく見つかった。修正されました。 – annakata

    +0

    ブリリアント。ありがとう - それは私にそれを考え出す年齢を取っていただろう。 – Sniffer

    0

    あなたはちょうど2つのパスを作ることができます。

    これはもちろん、ベンチマーク情報のためにannukataという、1回のパスで行うよりも効率的ではありませんが、最初の実装では「あなたが望むものを言う」だけで開発時間を大幅に短縮できます。このように、UNIX/Linuxでは

    +0

    私はそれをベンチマークしました。プレチェックを行う前に100Kの失敗したマッチが必要でしたが、かなり安くなりました。それは論理的/可読性の問題に値するものではありません。 – annakata

    3

    は、それがJavaScriptのファイルの '£' 記号を入力することは必ずしも可能ではありませんので、私はその16進数表現を使用する傾向がある:

    /^ \ XA3 \ D {? 1,3}→([、] \ d {3} | \ d)*?([。] \ d {1,2})?$/

    これは、私が遭遇した英国の通貨額表現のすべての組み合わせの世話をしているようです。

    +0

    パーフェクト。非常にありがとう! jqueryバリデーターを使用している人のために:btw: 'jQuery.validator.addMethod( 'currency'、function(value、element){ \t \t \t var result = value.match(/^\ xA3?\ d {1,3}?( [;] \ d {3} \ d)*?([。] \ d {1,2})?$ /); \t \t \t console.log( "val currency" + result); \t \t \t返品結果; \t \t}「金額をGBPで指定してください」; – BaronVonKaneHoffen