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

时间:2013-01-31 23:08:13

标签: regex

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

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

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

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

7 个答案:

答案 0 :(得分:20)

你需要逃避连字符:

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

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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

由于_代码为95,因此它在范围内,因此允许使用<=>等。

要避免这种情况,您可以转义-,即\-,或将-放在字符类的开头或结尾处:

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

无需转义",并注意由于您使用的是*量词,因此空字符串也会通过测试。

答案 3 :(得分:0)

使用此正则表达式,这将有效。

/ \ S([0-9]的 [A-ZA-Z] [\ SA-ZA-Z] [0-9] *)([A-ZA-Z0-9 !@#$%_&#39;&#39;&#34;&#34; \ ^ \&安培;?* - \] {1,20})$ /

答案 4 :(得分:0)

如何...允许使用特殊字符以及字母数字

"[-~]*$"

答案 5 :(得分:0)

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

对于kotlin示例

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

for 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
    }
}

答案 6 :(得分:0)

使用此正则表达式允许所有字母数字和特殊字符。这里\w允许所有数字,\s允许空格

[><?@+'`~^%&\*\[\]\{\}.!#|\\\"$';,:;=/\(\),\-\w\s+]*

允许的特殊字符为! @ # $ & ( ) - ‘ . / + , “ = { } [ ] ? / \ |

相关问题