カンマ(。)の後に2桁と1桁のみを許可するにはどうすればよいですか?

Nov 21 2020

適切なものをRegExpまとめることができないという問題があります。私の目標は、コンマの前に最大3桁を許可し、小数がある場合にのみ、コンマの後に1桁を許可することです。RegExpこの動作には、どちらまたは正規表現を使用する必要がありますか?

許可された結果:000.0、00.0、0.0、000、00、0

これが現在のコードですが、問題は、ここでも小数点なしで4桁を配置できることです。

inputFormatters: [
  FilteringTextInputFormatter.allow(RegExp(r'^\d{1,3}\.?\d{0,1}')),
],

私はすでにこれらをスクロールしましたが、それらは私のために機能していません:

Javascript Regexは、2桁の数字と3桁の数字のみをコンマ区切りで許可します

最大11桁、1つのコンマ、およびその後の2桁のみに一致するJavascript正規表現

Jqueryでは、ドットの前後2桁のみをフロートできます

Flutter-TextFormFieldの正規表現

フラッター入力で10進数を2つだけ許可しますか?

回答

1 Andrej Nov 21 2020 at 21:33

私は正規表現の専門家ではないので、このヘルパー関数の使用を提案することしかできません。

  bool match(String input) {
    if (input.split('.').length == 1) {
      // if there is no dot in the string
      // returns true if the length is < 4
      return (input.length < 4) ? true : false;
    } else if (input.split('.').length > 1){
      // if there is more than one dot in the string
      return false;
    } else {
      // if there is a dot in the string
      // returns true if there are < 4 digits before the dot and exactly 1 digit 
      // after the dot
      return (input.split('.')[0].length < 4 && input.split('.')[1].length == 1)
          ? true
          : false;
    }
  }
2 AkshitOstwal Nov 21 2020 at 21:27
RegExp(r'^\d{0,3}(\.\d{1})?$')

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

また、コンマで平均小数(。)を考え、小数の前に3桁、小数の後に1桁が必要だと考えています。

TextFormField(
  autoValidateMode: AutoValidateMode.always,
  validator: (value) {
    return RegExp(r'^\d{0,3}(\.\d{1})?$').hasMatch(value) ? null : 'Invalid value';
  },
)
1 BambinoUA Nov 22 2020 at 09:26

入力フォーマッタは、データを視覚的にフォーマットし、必要なフォーマットが相互に含まれているため、ここでは当てはまりません。@AndrejのバリデータでTextFormFieldandvalidatorプロパティを使用するか、を使用する必要がありますRegExp

TextFormField(
  autoValidateMode: AutoValidateMode.always,
  validator: (value) {
    return RegEx(r'^\d{1,3}(\.\d)?$').hasMatch(value) ? null : 'Invalid value';
  },
)

RegExpはここで機能しています。