dart,正则表达式,如何不允许特殊字符?

问题描述 投票:0回答:2

如何不允许特殊字符?我尝试过的是

final RegExp regex2 = RegExp(r"!^[`~!@#$%^&*()-_=]+$");

这似乎不起作用并且

final RegExp regex = RegExp(r"^[a-z0-9]+$");

我也不想要这个方法。这是因为我不仅要允许英语,还要允许其他语言。

regex dart
2个回答
5
投票

如果您想允许字母数字,但不仅仅是ASCII,您可以使用Unicode转义:

var re = RegExp(r"^[\p{Letter}\p{Number}]+$", unicode: true);

或简写:

var re = RegExp(r"^[\p{L}\p{N}]+$", unicode: true);

尝试列出所有非字母将非常困难。 尝试列出所有字母同样困难。

在实践中,您可能还希望允许组合标记,因此也许像“é”这样的东西既可以作为组合字符进行匹配,也可以作为

e
后跟组合重音来匹配:

var re = RegExp(r"^(?:\p{L}\p{Mn}*|\p{N})+$", unicode: true);

还接受字符串

"ide\u0301"
(包含
e
+
é
的重音组合标记)。

这是否足够取决于您的实际用例。 如果它试图识别人们的真实姓名,您可能需要更多字符。有些名称也包含破折号或撇号,例如 “玛丽·简·奥莱利”。 (此外,还有一些非常时髦的

\p{Letter}
)。


0
投票
RegExp(r"^[\p{L}\p{N}\s]+", unicode: true)

这条线将:

  1. 禁用特殊字符。
  2. 允许所有字母、数字和空格。
  3. 如果用户输入特殊字符,则不会清除文本字段中的文本。
© www.soinside.com 2019 - 2024. All rights reserved.