我有要求允许字母数字字符和某些字段的某些其他字符。我使用正则表达式:包含字母数字和特殊字符的正则表达式
"^[[email protected]#$&()-`.+,/\"]*$".
允许的特殊字符! @ # $ & () - ‘ ./+ , “
但是当我测试的模式与字符串“test_for_extended_alphanumeric”,该字符串通过测试。我没有"_"
模式允许。我究竟做错了什么?
我有要求允许字母数字字符和某些字段的某些其他字符。我使用正则表达式:包含字母数字和特殊字符的正则表达式
"^[[email protected]#$&()-`.+,/\"]*$".
允许的特殊字符! @ # $ & () - ‘ ./+ , “
但是当我测试的模式与字符串“test_for_extended_alphanumeric”,该字符串通过测试。我没有"_"
模式允许。我究竟做错了什么?
字符类中的连字符表示范围,除非它们被转义或者在字符类的开始或结尾。如果要包括连字符,它通常是一个好主意,把他们在前面,所以你甚至不必担心逃避:
^[[email protected]#$&()`.+,/\"]*$
顺便说一句,_
)
和反引号之间确实下降在ASCII:
http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
在你的性格类)-'
被解释为范围相同的方式,例如, a-z
,因此它指任何带有十进制ASCII代码41 )
至96 '
的字符。
由于_
具有代码95,它在该范围内,并因此允许的,甚至<
,=
,>
等
为了避免这种情况您可以逃避-
,即\-
,或把在-
开始或字符类的结尾:
/^[[email protected]#$&()`.+,/"-]*$/
没有必要逃避"
,并请注意,由于您使用的是*
量词,电子空字符串也将通过测试。
使用此正则表达式,这将工作。 ([0-9] [a-zA-Z] [\ sa-zA-Z] [0-9] *)([A-Za-z0-9!@#$ %_ '' “” \^\ &。* - \] {1,20})$/
这个怎么样..它允许特殊字符,以及字母数字
"[-~]*$"
?因为我不知道有多少特殊字符存在,所以很难通过白名单检查包含特殊字符的字符串。检查字符串只包含字母或数字可能更有效。
为科特林例如
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
}
}
感谢您的快速响应。这有帮助。 –