巴基斯坦CNIC扑朔迷离的正则表达式

问题描述 投票:-1回答:1

我想为巴基斯坦CNIC(12345-1234567-8)制作正则表达式。我搜索正则表达式,但在输入文本字段中没有任何价值。

我使用了下面的代码,但在我的输入字段中未键入任何内容。

inputFormatters: [WhitelistingTextInputFormatter(RegExp("^[0-9]{5}-[0-9]{7}-[0-9]{1}"))],

请帮助我如何使用它?

提前感谢。

regex flutter flutter-layout
1个回答
0
投票

您应该使自己拥有定制的inputFormatter

我帮你做

class NumberTextInputFormatter extends TextInputFormatter {
  @override
  TextEditingValue formatEditUpdate(
      TextEditingValue oldValue, TextEditingValue newValue) {
    final int newTextLength = newValue.text.length;
    int selectionIndex = newValue.selection.end;
    int usedSubstringIndex = 0;
    final StringBuffer newText = new StringBuffer();
    if (newTextLength >= 6) {
      newText.write(newValue.text.substring(0, usedSubstringIndex = 5) + '-');
      if (newValue.selection.end >= 5) selectionIndex += 1;
    }
    if (newTextLength >= 13) {
      newText.write(newValue.text.substring(5, usedSubstringIndex = 12) + '-');
      if (newValue.selection.end >= 12) selectionIndex += 1;
    }
    // Dump the rest.
    if (newTextLength >= usedSubstringIndex)
      newText.write(newValue.text.substring(usedSubstringIndex));
    return new TextEditingValue(
      text: newText.toString(),
      selection: new TextSelection.collapsed(offset: selectionIndex),
    );
  }
}

并创建一个实例:

final _mobileFormatter = NumberTextInputFormatter();

并且您的FormField应该像这样:

TextField(
    inputFormatters: [
        WhitelistingTextInputFormatter.digitsOnly,
        _mobileFormatter
    ],
    maxLength: 15
),
© www.soinside.com 2019 - 2024. All rights reserved.