首页 > 解决方案 > 如何将句号“.”后第一个单词的TextField值首字母大写?

问题描述

这样的事情可能吗?

例如:“我最喜欢的电影是矩阵。我认为……”

之前已经问过类似的问题,但它们是简单的大写第一个单词的第一个字母,而不是更多

此代码仅适用于第一个单词的第一个字母,无法理解“。”

extension CapExtension on String {
  String get inCaps =>
      this.length > 0 ? '${this[0].toUpperCase()}${this.substring(1)}' : '';

  String get capitalizeFirstofEach => this
      .replaceAll(RegExp(' +'), ' ')
      .split(" ")
      .map((str) => str.inCaps)
      .join(" ");
}

class CapitalCaseTextFormatter extends TextInputFormatter {
  @override
  TextEditingValue formatEditUpdate(
      TextEditingValue oldValue, TextEditingValue newValue) {
    return TextEditingValue(
      text: newValue.text.inCaps,
      selection: newValue.selection,
    );
  }
}

TextFormField(
   inputFormatters: [
            CapitalCaseTextFormatter()
                  ]
)

标签: flutterdarttextfield

解决方案


使用它来大写每个句子的第一个单词


extension CapExtension on String {
  String capitalizeSentence() {
  // Each sentence becomes an array element
  var sentences = this.split('.');
  // Initialize string as empty string
  var output = '';
  // Loop through each sentence
  for (var sen in sentences) {
    // Trim leading and trailing whitespace
    var trimmed = sen.trim();
    // Capitalize first letter of current sentence
    var capitalized = "${trimmed[0].toUpperCase() + trimmed.substring(1)}";
    // Add current sentence to output with a period
    output += capitalized + ". ";
  }
  return output;
}
}

// 文本输入格式化程序

class CapitalCaseTextFormatter extends TextInputFormatter {
  @override
  TextEditingValue formatEditUpdate(
      TextEditingValue oldValue, TextEditingValue newValue) {
    return TextEditingValue(
      text: newValue.text.capitalizeSentence,
      selection: newValue.selection,
    );
  }
}

推荐阅读