/ / objective-c: určenie, či sa regex zhoduje s reťazcom - iphone, objektív-c, kakao-dotyk

cieľ-c: určenie, či sa regex zhoduje s reťazcom - iphone, objektív-c, kakao-dotyk

Čo sa deje s nasledujúcim kódom?

-(IBAction)numFieldDoneEditing{
NSPredicate * regexTest = [NSPredicate predicateWithFormat: @"SELF MATCHES "^\d*\.\d{2}$""];
NSString *text = [[NSString alloc] initWithFormat: @"%@", numberField.text];
if ([regexTest evaluateWithObject: text] == YES) {
//do something
}
else{
//do something else
}
[text release];
[regexTest release];
}

odpovede:

3 pre odpoveď č. 1

Z nejakého dôvodu musíte uniknúť spätným lomikom dvakrát pre d sekvencia v špecifikácii regexu:

NSPredicate * regexTest = [NSPredicate predicateWithFormat: @"SELF MATCHES "^\\d*\.\\d{2}$""];

Niektoré ďalšie problémy s vaším kódom:

  • Nemali by ste uvoľňovať regexText objekt, pretože nie ste vlastníkom. Nebolo vytvorené metódou s názvom init alebo copy, Pozrite si Sprievodca programovaním programovania pamäte pre kakao
  • Je to viac problém štýlu, ale ak mátebooleovskú premennú, nedá to porovnať za rovnosť s ÁNO alebo NIE, jednoducho to robí kód ťažšie pochopiť.Tak len otestujte to alebo jeho inverzné priamo.Napríklad:

    // Positive test:
    if([regexTest evaluateWithObject: text])
    ; // do stuff
    
    // Negative test
    if(![regexTest evaluateWithObject: text])
    ; // do stuff
    

3 pre odpoveď č. 2

Vzhľadom k tomu, ste označili toto s iphone akakao-dotyk, treba poznamenať, že NSPredicate nie je k dispozícii na iPhone. Stále bude fungovať v simulátore, pretože používa desktopové rámce, ale nebude fungovať na samotnom iPhone.