Edited at

Swiftで半角英字のValidation(英字ニックネームなど)

More than 3 years have passed since last update.

半角アルファベットのみで入力させたい場合のバリデーション


extension String {

var isAllHalfWidthCharacter: Bool {
// 半角も全角も1文字でカウント
let nsStringlen = self.characters.count
let utf8 = (self as NSString).UTF8String
// Cのstrlenは全角を2で判定する
let cStringlen = Int(bitPattern: strlen(utf8))
if nsStringlen == cStringlen {
return true
}

return false
}

var isValidNickName: Bool {
if rangeOfCharacterFromSet(.letterCharacterSet(), options: .LiteralSearch, range: nil) == nil { return false }
if rangeOfCharacterFromSet(.decimalDigitCharacterSet(), options: .LiteralSearch, range: nil) != nil { return false }
guard self.isAllHalfWidthCharacter else { return false }
return true
}
}


実用例

isValidNickNameでチェック

   if nickname.isValidNickName {

// Set Data
} else {
// Alert
let alertController = UIAlertController(
title: "半角英字のみで入力してください",
message: "",
preferredStyle: .Alert)
let otherAction = UIAlertAction(title: "OK", style: .Default) {
action in
self.navigationController?.popToViewController(self.navigationController!.viewControllers[0], animated: true)
}

alertController.addAction(otherAction)
presentViewController(alertController, animated: true, completion: nil)
}

NSStringではlengthでカウントできるのに、

String型ではcharacters.countって長い