RegEx包含字母数字和特殊字符

问题描述 投票:14回答:6

我要求允许字段的字母数字和某些其他字符。我正在使用这个正则表达式:

 "^[a-zA-Z0-9!@#$&()-`.+,/\"]*$".

允许的特殊字符是! @ # $ & ( ) - ‘ . / + , “

但是当我用字符串“test_for_extended_alphanumeric”测试模式时,字符串通过了测试。我没有允许在模式中使用"_"。我究竟做错了什么?

regex
6个回答
20
投票

你需要逃脱连字符:

"^[a-zA-Z0-9!@#$&()\\-`.+,/\"]*$"

如果你没有逃脱它,那么它意味着一系列的字符,如a-z


0
投票

字符类中的连字符表示范围,除非它们被转义或在字符类的开头或结尾处。如果你想要包含连字符,通常最好将它们放在前面,这样你甚至不必担心转义:

^[-a-zA-Z0-9!@#$&()`.+,/\"]*$

顺便说一句,_确实落在)和ASCII中的反引号之间:

http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters


0
投票

在你的角色类中,)-'被解释为一个范围,与例如a-z,因此它指的是带有十进制ASCII码的任何字符,从41 )到96 '

由于_的代码为95,所以它在范围内,因此允许,如<=>等。

为了避免这种情况,你可以逃避-,即\-,或者将-放在角色类的开头或结尾:

/^[a-zA-Z0-9!@#$&()`.+,/"-]*$/

没有必要逃避",并注意,因为你使用*量词,空字符串也将通过测试。


0
投票

使用这个正则表达式,这将工作。

(ЭС-Ь-Ь-Ь-Ь-ЬЬЬЬЬ¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ /


0
投票

怎么样...允许特殊字符和字母数字

"[-~]*$"

0
投票

因为我不知道有多少特殊字符存在,所以很难通过白名单检查字符串是否包含特殊字符。检查字符串仅包含字母或数字可能更有效。

对于kotlin的例子

fun String.hasOnlyAlphabetOrNumber(): Boolean {
    val p = Pattern.compile("[^a-zA-Z0-9]")
    if (p.matcher(this).matches()) return false
    return true
}

对于swift4

func hasOnlyAlphabetOrNumber() -> Bool {
    if self.isEmpty { return false }
    do {
        let pattern = "[^a-zA-Z0-9]"
        let regex = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)
        return regex.matches(in: self, options: [], range: NSRange(location: 0, length: self.count)).count == 0
    } catch {
        return false
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.