【问题标题】:Add special characters to alphanumeric regex向字母数字正则表达式添加特殊字符
【发布时间】:2013-12-19 23:49:20
【问题描述】:

全新使用正则表达式。我有一个目前只接受字母数字字符。我需要在正则表达式中添加以下特殊字符:

@ #$%*():;"',/? !+=-_ 

这里是正则表达式:

RegularExpression(@"^[a-zA-Z\s.,0-9-]{1,30}$",

当我尝试添加特殊字符时,我会像这样更改正则表达式:

RegularExpression(@"^[a-zA-Z\s.,0-9-@ #$%*():;"',/? !+=-_]{1,30}$"

但是,这会引发以 ' 字符开头的错误,即 Newline in constant

我已经绑定了 "' 字符,但是没有任何运气。

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    问题来自需要转义的双引号 (""),而不是单引号。

    @"^[a-zA-Z\s.,0-9@#$%*():;""'/?!+=_-]{1,30}$"
    

    请注意,- 必须位于字符类的最后(或第一个)位置,因为它具有特殊含义(定义范围)

    【讨论】:

    • - 不必位于开头或结尾即可被解析为文字。它可以在子句之间或被转义。
    • 对不起,我以为这是 PCRE 引擎的。我还没有针对 C# 测试过它,这可能会也可能不会不同。
    • @Casimir et Hippolyte - 随着解析从左到右进行,我认为子句在类中是孤立的子结构。例如 [\w-a-z-\pL-\s] 是子句,其他都是文字。在这种情况下,- 是文字。 C# 对类的解析方式不同,它有一些特殊的元字符(如 &&),因此它可能会考虑不同。
    • 在 Perl/PCRE 引擎上,[a-z-A-Z0-9_][a-zA-Z0-9_-][\w-] 在功能上是相同的。
    • 刚刚确认,C# 是相同的 [a-z-A-z] 包括文字 -。这真的不足为奇,没有理由无条件地拒绝它。事实上,它只会碍事。
    【解决方案2】:

    这些正则表达式与您的相同。
    两者都使用波浪号 ~ 作为分隔符。
    两者都在正则表达式字符串上使用双引号。

    请注意,为了将类中的破折号- 解释为字面意思而不是范围运算符,它必须存在于某个明确的地方,或者被转义。
    放置它的好地方是在有效范围之间(或在类的开头或结尾)。
    例如 [a-z-0-9] 是一个好地方。
    编辑 - '-' 文字可能必须转义或类的开始/结束。 (这个案例是针对 Perl/PCRE 引擎的)

    这个^[a-z-A-Z0-9_\s.,@#$%*():;"',/?!+=]{1,30}$ 是您的正则表达式,没有重复字符。

    为了使其更具可读性,注意包含单词类,可以将其简化为
    ^[\w-\s.,@#$%*():;"',/?!+=]{1,30}$

    编辑 - 删除 PHP 测试用例。

    【讨论】:

    • 对不起,我看到这是 C#。我可以发誓它是 php。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 2020-07-02
    • 2014-01-07
    相关资源
    最近更新 更多