我试图在飞镖正则表达式中捕获符号。我的正则表达式如下所示:
RegExp containsSymbolRegExp = RegExp(r"[-!$%^&*()_+|~=`{}\[\]:;'<>?,.\/]");
Run Code Online (Sandbox Code Playgroud)
但是,我还需要让它抓住符号“我不能粘在那里”,因为它与字符串混淆。任何想法如何做到这一点?谢谢。
编辑:jamesdlin 的回答非常适合飞镖。但它不适用于我的颤振应用程序,所以我认为它与颤振有关。这是我将其应用于的代码:
TextEditingController _passwordController = TextEditingController();
bool containsSymbol;
RegExp containsSymbolRegExp = RegExp(r"[-!$%^&*()_+|~=`{}#@\[\]:;'<>?,.\/"
'"'
"]");
void _handleChange(text) {
setState(() {
containsSymbol = containsSymbolRegExp.hasMatch(_passwordController.text);
});
print(containsSymbol); // always prints false for " ' \ but works for all other symbols
}
Widget _textField(controller, labelText) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(labelText, style: TextStyle(fontSize: 11)),
Container(
width: MediaQuery.of(context).size.width * 0.9,
height: 35,
child: TextField(
onChanged: _handleChange,
style: TextStyle(fontSize: 20),
keyboardType: TextInputType.text,
controller: _passwordController,
cursorColor: Colors.grey,
decoration: InputDecoration(
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.grey))),
),
),
],
);
}
Run Code Online (Sandbox Code Playgroud)
更好的解决方案是使用三元组"作为字符串的开头和结尾。
在这种情况下,"字符串不会结束。
尝试这个:
RegExp containsSymbolRegExp = RegExp(r"""your_regexp_here""");
Run Code Online (Sandbox Code Playgroud)
也可以用撇号来完成,如下所示:
RegExp containsSymbolRegExp = RegExp(r'''your_regexp_here''');
Run Code Online (Sandbox Code Playgroud)
您可以利用相邻字符串文字的字符串连接,并使用单引号字符串或使用"转义的非原始字符串:
RegExp(
r"[-!$%^&*()_+|~=`{}\[\]:;'<>?,.\/"
'"'
"]");
Run Code Online (Sandbox Code Playgroud)
或者,您始终可以使用带有更多转义符的非原始字符串:
RegExp(
"[-!\$%^&*()_+|~=`{}\\[\\]:;'<>?,.\\/\"]");
Run Code Online (Sandbox Code Playgroud)
虽然那更麻烦。
| 归档时间: |
|
| 查看次数: |
1048 次 |
| 最近记录: |