私が取り組んでいるアプリでは、テキスト フィールドに文字 A、T、C、または G のみが含まれているかどうかを確認する必要があります。さらに、入力されたその他の文字に対して特殊なエラー メッセージを作成したいと考えています。例)「スペースを入れないでください。」または「文字 b は受け入れられない値です。」このような他の投稿をいくつか読みましたが、それらは英数字であり、指定された文字のみが必要です。
3 に答える
ユニークとはほど遠い、あなたのための1つのアプローチ:
NString
NSRange
には、指定された 内の文字から構成される、位置とオフセットのとして表される部分文字列を検索するメソッドがありますNSCharacterSet
。
文字列に含まれるべきもののセット:
NSCharacterSet *ATCG = [NSCharacterSet characterSetWithCharactersInString:@"ATCG"];
そして、すべきでないもののセット:
NSCharacterSet *invalidChars = [ATCG invertedSet];
で構成される任意の範囲の文字を検索できるようになりましたinvalidChars
。
NSString *target; // the string you wish to check
NSRange searchRange = NSMakeRange(0, target.length); // search the whole string
NSRange foundRange = [target rangeOfCharacterFromSet:invalidChars
options:0 // look in docs for other possible values
range:searchRange];
無効な文字がない場合foundRange.location
は と等しくなりNSNotFound
ます。それ以外の場合は、文字の範囲を調べてfoundRange
、特殊なエラー メッセージを生成します。
プロセスを繰り返し、 にsearchRange
基づいて更新しfoundRange
て、無効な文字のすべての実行を見つけます。
見つかった無効な文字をセット (おそらくNSMutableSet
) に蓄積し、最後にエラー メッセージを生成することができます。
正規表現も使用できます。 を参照してくださいNSRegularExpressions
。
HTHなど
補遺
これに対処するための非常に簡単な方法がありますが、あなたが与えた手紙が非常に長い文字列を扱っている可能性があり、上記のように提供されたメソッドを使用することは価値があるかもしれないことを示唆しているため、私はそれを与えませんでした. しかし、あなたのコメントの後に考え直してみると、多分私はそれを含める必要があります:
NSString *target; // the string you wish to check
NSUInteger length = target.length; // number of characters
BOOL foundInvalidCharacter = NO; // set in the loop if there is an invalid char
for(NSUInteger ix = 0; ix < length; ix++)
{
unichar nextChar = [target characterAtIndex:ix]; // get the next character
switch (nextChar)
{
case 'A':
case 'C':
case 'G':
case 'T':
// character is valid - skip
break;
default:
// character is invalid
// produce error message, the character 'nextChar' at index 'ix' is invalid
// record you've found an error
foundInvalidCharacter = YES;
}
}
// test foundInvalidCharacter and proceed based on it
HTH
NSRegularExpression クラスのリファレンスを見てください。