【问题标题】:Regex pattern with no special characters at the beginning and end. but Within a string is fine开头和结尾没有特殊字符的正则表达式模式。但在一个字符串内很好
【发布时间】:2018-01-01 19:42:24
【问题描述】:

我必须为特定字符串实施以下规则。

字段应被填充并应包含最多 52 个字母数字字符。允许使用四个特殊字符“:”、“.”、“-”、“_”。特殊字符不允许出现在开头或结尾。

我尝试使用模式 [0-9A-Za-z:.-_] 来包含字母数字和 4 个特殊字符,但我不确定如何确保它们不会出现在字符串的开头或结尾。例如“Hello:123Howareyou”是有效的,但“:hello58475howareu”是无效的。

此模式无法帮助 [0-9A-Za-z:.-] 包含字母数字和特殊字符,并且 (^(:.-)) 字符串的开头不应以这些开头特殊字符和 ((:.-_)$) 字符串结尾不应以这些特殊字符结尾。如何处理“开头或结尾不允许特殊字符”。这部分。

谢谢 帕什

【问题讨论】:

  • 这适用于所有但不是特殊字符。例如 Pattern pattern = Pattern.compile("^[0-9A-Za-z]+[0-9A-Za-z:.-_]*[0-9A-Za-z]+$");这为“hello-howareu”返回 false,但为“hello_howareu”返回 true

标签: regex


【解决方案1】:

我会使用:

^[a-zA-Z0-9][\w:.-]{0,50][a-zA-Z0-9]$

其中\w[a-zA-Z0-9_] 相同

这将匹配最长为 52 个字符且至少为 2 个字符的字符串。

如果要匹配至少一个字符:

^[a-zA-Z0-9](?:[\w:.-]{0,50][a-zA-Z0-9])?$

【讨论】:

    【解决方案2】:

    为字母数字添加正则表达式,仅用于开头和结尾:

    ^[0-9A-Za-z]+[0-9A-Za-z:.\-_][0-9A-Za-z]+$
    

    或更短的版本

    ^[\w]+[\w:.\-_][\w]+$
    

    【讨论】:

    • 这适用于所有但不是 - 特殊字符。例如 Pattern pattern = Pattern.compile("^[0-9A-Za-z]+[0-9A-Za-z:.-_]*[0-9A-Za-z]+$");这为“hello-howareu”返回 false,但为“hello_howareu”返回 true
    猜你喜欢
    • 2017-09-17
    • 1970-01-01
    • 2013-08-04
    • 2023-03-03
    • 2019-08-26
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 2016-12-07
    相关资源
    最近更新 更多