我有要求允許字母數字字符和某些字段的某些其他字符。我使用正則表達式:包含字母數字和特殊字符的正則表達式
"^[[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
}
}
感謝您的快速響應。這有幫助。 –