如何检查一个字符串是否只包含字母、数字、下划线和句号。Flutter/Dart 如何检查一个字符串是否只包含字母、数字、下划线和句号。Flutter/Dart

4

我想检查一个字符串是否仅包含:

  1. 字母
  2. 数字
  3. 下划线
  4. 句号

在Flutter中, 我尝试了以下代码来只获取字母, 但是即使其他字符存在,它也返回true如果字符串包含一个字母:

String mainString = "abc123";

print(mainString.contains(new RegExp(r'[a-z]')));

就像我所说的,它返回true因为包含字母,但我想知道它是否仅包含字母。

是否有一种方法可以做到这一点?

2个回答

21
您的 RegExp 的问题在于,它允许匹配子字符串,并且只匹配单个字符。您可以使用 ^$ 强制要求整个字符串匹配,您可以使用 + 对表达式中的一个或多个进行匹配:
print(RegExp(r'^[a-z]+$').hasMatch(mainString));

要匹配您提到的所有字符:

print(RegExp(r'^[A-Za-z0-9_.]+$').hasMatch(mainString));

2

实现这个的基本方法如下:

  1. 定义一组可接受的字符:
// for example
List<String> validChar = ["1", "2", "3", "t"];

循环遍历您的字符串中的所有字符并检查其有效性:
  // given text
  String x = "t5";
  
  bool valid = true;
  for(int i=0; i<x.length; i++){
    if(!validChar.contains(x[i])){
      valid = false;
    }
  }
  print(valid);

只需要根据您的需求更改xvalidChar即可。


1
目前这个算法的时间复杂度是O(n^2),你可以通过使用HashSet替换内部的validChar列表来将其优化为O(n)。参考链接:https://api.dart.dev/stable/2.19.2/dart-collection/HashSet-class.html - Hitesh Kumar Saini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接