如何不允许特殊字符?我尝试过的是
final RegExp regex2 = RegExp(r"!^[`~!@#$%^&*()-_=]+$");
这似乎不起作用并且
final RegExp regex = RegExp(r"^[a-z0-9]+$");
我也不想要这个方法。这是因为我不仅要允许英语,还要允许其他语言。
如果您想允许字母和数字,但不仅仅是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}
)。
RegExp(r"^[\p{L}\p{N}\s]+", unicode: true)
这条线将: