如何在 swift 上检查非法字符。(Windows、Android 和 IOS 的非法字符)



我正在为IOS和mac制作一个特殊的文件保存系统。

我的程序基本上允许用户写文件名,但在写之前,我需要检查IOS、Windows和Android中是否存在非法字符,因为它们都可能通过用户自己的决定(例如通过电子邮件或USB(传递到另一个系统中。

一般来说,如果您试图将任何具有非法"名称"的文件带入另一个系统,该文件要么会损坏,要么根本无法传递到系统中。

我的代码的问题是,只有当字符串中总共有一个字符时,它才有效。如果是前一种情况,regex检查器不会检测到任何内容,无论非法字符在哪里或有多少。

这是我的密码。

//Validates the string for illegal file name characters
//https://stackoverflow.com/questions/14635391/java-function-to-return-if-string-contains-illegal-characters
func hasIllegalCharacters(locationNameString: String) -> Bool{
//do {
//Pattern pattern = Pattern.compile("[\\/:*?"<>|]");
let illegalRegEx = "[~#@*+%{}<>\[\]|"\_^]"
//let ipAddressRegEx = "|\?*<":>+[]/'"
let trimmedString = locationNameString.trimmingCharacters(in: .whitespaces)
let validateName = NSPredicate(format:"SELF MATCHES %@", illegalRegEx)
let isIllegal = validateName.evaluate(with: trimmedString)
if(isIllegal){
print("has illegal chars")
}
else{
print("no illegal detected")
}
return isIllegal
}
extension String {
var containsSpecialCharacter: Bool {
let regex = ".*[^A-Za-z0-9].*"
let testString = NSPredicate(format:"SELF MATCHES %@", regex)
return testString.evaluate(with: self)
}
}

Regex列出所有非非法字符,然后testString测试字符串是否与Regex中的字符匹配。它将返回True或False

最新更新