【问题标题】:Detecting angle and curly brackets in RegEx在 RegEx 中检测角括号和大括号
【发布时间】:2011-10-10 16:15:33
【问题描述】:

我有一个正则表达式来验证文本框是否只允许特定字符。我目前的表达是

pattern = "^([-_,A-Za-z0-9 !@#$%^&()=+;'.~`]{1,60})$";

如果输入的字符不是输入则报告错误。这完美地工作。现在我想允许[]{}(方括号和大括号)作为有效字符。我尝试包含这些,但如果我将它们包含在我拥有的模式中,IsMatch 方法总是返回 false。我添加它们如下,

pattern = "^([-_,A-Za-z0-9 !@#$%^&()[]{}=+;'.~`]{1,60})$";

我仅针对字母数字字符串值对此进行了测试。 IsMatch 也返回 false 。我很确定我对包含的新东西做错了什么。

谁能告诉我修改后的模式有什么问题?

【问题讨论】:

    标签: c# .net regex validation textbox


    【解决方案1】:

    您需要转义方括号内的方括号。

    pattern = "^([-_,A-Za-z0-9 !@#$%^&()\[\]{}=+;'.~`]{1,60})$";
    

    顺便说一句:{} 是大括号或花括号,而不是尖括号。

    【讨论】:

    【解决方案2】:

    如果您希望您的正则表达式可移植,请将右方括号放在首位,连字符放在最后,如下所述:http://www.regular-expressions.info/posixbrackets.html

    pattern = "^([][_,A-Za-z0-9 !@#$%^&(){}=+;'.~`-]{1,60})$";
    

    【讨论】:

    • 感谢大家的回复。我很欣赏这些链接来教育我,而不仅仅是提供解决方案。
    • 不幸的是,并非所有的正则表达式都遵循这些约定。例如,在 Java 中,无论您将方括号放在哪里,您总是必须转义方括号——打开 关闭它们。当然,您必须逃脱转义以通过字符串文字处理。 C# 中的 "[][-]" 在 Java 中变为 "[\\]\\[-]"
    • @Alan:我并不真正关心 Java 的问题。如果 Java 不遵循 POSIX、Perl、awk、sed、vim 甚至像 .NET 这样的新人所支持的约定,那是 Java 中的错误,而不是约定中的错误。
    • 您对“便携”的定义肯定与我不同。 Java 并没有声称是 POSIX 兼容的,所以这很难算作一个错误,虽然它很烦人。想想看,.NET 也不行。它可能遵循位置转义约定,但不支持像[:alpha:] 这样的POSIX“字符类”。
    • @Alan:如果某些东西在 5/7 实现中有效,那就是“便携”。对于 7/7,我会使用“通用”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多