2017-04-25 2 views
0

私はこの正規表現を持っていると一致しない:^(\d*.?\d*)$すべての数値のため、いくつかの数字は、この正規表現で正規表現は、いくつかの数字

いくつかの例とは一致しません:

54139 // work 
24.711 // won't work, not a float but dot is the separator 
0 // won't work 
60 // won't work 

私はRegexValidatorでこの正規表現を使用しました。私は、テキストフィールドを検証しています:

TextField textField = new TextField(caption); 
textField.setValue(value); 
textField.addValidator(new StringLengthValidator(value + " ...",10, 50, true)); 
textField.addValidator(new RegexpValidator("^(\\d*.?\\d*)$", value + " ...")); 

私は別の正規表現でそれを試してみました:私が正しくあなたの問題を理解している場合^[0-9,.]+$

+2

ドットをエスケープします。スラッシュで '\ .'! –

+0

浮動小数点ではなく、小数点が区切りであることを意味しますか? 2つの別々の整数として解析する必要がありますか? – Aaron

+0

@Aaronの場合、10進数ではありません。ドットはセパレータです – emoleumassi

答えて

0

、あなたは複数行TextFieldの内容を検証して受け入れるようにしたいしています.の分割されていない浮動小数点数と整数の1つまたは複数の空でないシーケンスからなるコンテンツ。

このステートメントは、.で区切られた数字のシーケンス、または小数部を含むことができる改行を検索するために簡略化できます。

RegexpValidatorを使用する場合:

new RegexpValidator("\\d+(,\\d+)?([.\\n]\\d+(,\\d+)?)*", true, value + "...") 

この正規表現では、番号は、そのカンマ区切りでの任意の小数部が続く必須の整数部分を表す、\\d+(,\\d+)?として表されます。

グローバル正規表現では、上記で定義したような数字を受け取り、その後に受け入れられた区切り文字の1つ、つまり.または改行で始まる他の数字のシーケンス(空の場合もあります)を受け取ります。私はあなたが使用するアンカーを削除し、代わりにRegexpValidatorcompleteパラメータを使用

"54139\n12.5\n1,2.5,3\n12,5".matches("\\d+(,\\d+)?([.\\n]\\d+(,\\d+)?)*"); 

注:

私は trueを返し、次の式で私の答えを検証しました。

正規表現はおそらく\d+([.,\n]\d+)*に縮小されますが、数字の間のセパレータである.と数字の一部である,の差の表現は中止されます。実行時にはバリデータは重要ではありませんが、コードを管理する人に混乱を招く可能性があります。後で別の番号に一致させたい場合は、簡単に再利用できません。

関連する問題