0

価格を一致させるための正規表現がありますが、小数はオプションです。

/[0-9]+(\.[0-9]{1,2})?/

今私がやりたいのは、式の逆を取得することですが、そうするのに苦労しています。私は次のような単純なものを思いついた、

/[^0-9.]/g

ただし、これにより複数の「。」が許可されます。文字と小数点以下の 2 つ以上の数字。入力価格フィールドを修正するために、blur で jQuery 置換関数を使用しています。したがって、ユーザーが次のように入力すると、

「S$4sd3.24151 . x45 何とか何とかテキスト何とか」または「!#%!$43.24.234asdf 何とか何とかテキスト何とか」

それは戻ってきます

43.24

誰でもこれを行うための提案を提供できますか?

4

2 に答える 2

1

私はそれを2つのステップで行います。最初に、非数字および非ドット文字を何も削除しません。

/[^0-9.]//g

これにより、最初と 2 番目の例ではそれぞれ と43.24151.45が生成されます。43.24.234次に、最初の正規表現を使用して、有効な価格の最初の出現に一致させることができます。

/\d(\.\d{1,2})?/

これを行うと43.24、両方の例が得られます。

于 2013-09-26T09:10:32.113 に答える
0

プログラミングでは、「逆」が何を意味するのかが必ずしも明確であるとは限りません。

あなたが提示した例のみに基づいて解決策を提案するために、Vince が提示したものと非常によく似たものを提示します。キャプチャ グループを繰り返すことで、必要なパターンに一致し、潜在的に任意の桁数をキャプチャする正規表現を作成するのが困難です。そして、これが合理的な方法で実行できるかどうかはわかりません(おそらく他の誰かが実行します)。しかし、2 段階のアプローチは簡単なはずです。

なお、「jQuery 置換関数」とは、jQuery の replaceWith 関数や replaceAll 関数ではなく、String オブジェクトのメンバーである JavaScript の replace 関数を指していると思われます。後者は「Dom 操作」関数です。しかし、私が誤解した場合は修正してください。

例として、いくつかの仮説的な入力に基づいて、次を使用できます

<b>var numeric_raw = jQuery('input.textbox').attr ('value').replace (/[^0-9.]/g, "")</b>

テキスト フィールドに入力された値から、数字またはピリオド以外のすべての文字を削除する。その後、使用できます

<b>var numeric_str = numeric_raw.replace (/^[0]*(\d+\.\d{1,2}).*$/, "$1")</b>

ここで指定されたクラスと Vince の回答で指定されたクラスの違いは、先頭の 0 のフィルタリングを含めていることです。なお、Vince の最初の正規表現には余分な「/」が含まれている可能性があります。

「逆」に関して、あなたの最初の質問を理解する 1 つの方法は、あなたが提供したものと反対のことをする表現を探しているということです。ご提供いただいた式 (/[0-9]+(.[0-9]{1,2})?/) は、整数と小数点以下 2 桁までの 10 進数の両方に一致しますが、任意の 1 桁の数字に一致します。そのため、特定の入力文字列に対して、想定されていない一致を特定する場合があります。式にはアンカー ('^'、'$') がないため、複数の一致が可能になる場合があります。たとえば、文字列 "1.111" では、"1.11" と "1" の両方が指定したパターンに一致します。

あなたのパターンに一致しない文字列に一致する1つのパターンは次のように見えます。または、少なくともほとんどの場合、これを行うことができます:

/^(?:(?!.*[0-9]+(\.[0-9]{1,2})?).*)*$/

-- 誰かが正確に「逆」パターンを識別できた場合は、お気軽にどうぞ -- 少なくともいくつかのニュアンスについて、先読みがどのように解釈されるかを理解するのに苦労しています。

これは、最近の JavaScript がサポートする「否定先読み」機能に依存しています。詳細については、いくつかのスタックオーバーフローの投稿を参照できます (例:正規表現と文字グループ全体の否定)。インターネット上には、「先読み」と「後読み」について説明している複数のリソースがあります。

この回答には、すでに与えられた回答と比べて冗長性があると思います-元の投稿者の投稿またはVinceの回答にコメントした可能性があります(回答の少なくとも一部を書く代わりに)が、まだコメントを作成できません!

于 2013-09-26T10:26:09.957 に答える