Poszukuję wyrażenia regularnego pasującego do następującego -100..100:0.01
. Znaczenie tego wyrażenia jest takie, że wartość może wzrosnąć o 0,01 i znajdować się w zakresie od -100 do 100.wyrażenie regularne w iOS
Każda pomoc?
Poszukuję wyrażenia regularnego pasującego do następującego -100..100:0.01
. Znaczenie tego wyrażenia jest takie, że wartość może wzrosnąć o 0,01 i znajdować się w zakresie od -100 do 100.wyrażenie regularne w iOS
Każda pomoc?
(\b|-)(100(\.0+)?|[1-9]?[0-9](\.[0-9]{1,2})?\b
Objaśnienie:
(\b|-) # word boundary or -
( # Either match
100 # 100
(\.0+)? # optionally followed by .00....
| # or match
[1-9]? # optional "tens" digit
[0-9] # required "ones" digit
( # Try to match
\. # a dot
[0-9]{1,2}# followed by one or two digits
)? # all of this optionally
) # End of alternation
\b # Match a word boundary (make sure the number stops here).
if(val>= -100 && val <= 100)
{
NSString* valregex = @"^[+|-]*[0-9]*.[0-9]{1,2}";
NSPredicate* valtest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", valregex];
ret = [valtest evaluateWithObject:txtLastname.text];
if (!ret)
{
[alert setMessage:NSLocalizedString(@"More than 2 decimals", @"")];
[alert show];
}
}
działa dobrze .. thnx za wysiłki facetów!
Dlaczego chcesz używać wyrażeń regularnych? Dlaczego nie po prostu zrobić coś jak (w Pseudokod):
is number between -100 and 100?
yes:
multiply number by 100
is number an integer?
yes: you win!
no: you don't win!
no:
you don't win!
Można użyć NSRegularExpression
zamiast. To nie obsługuje \b
, btw, choć trzeba uciec w ciągu:
NSString *regex = @"\\b-?1?[0-9]{2}(\\.[0-9]{1,2})?\\b";
Choć myślę \\W
byłoby lepszym pomysłem, ponieważ \\b
bałagan wykrywania znak ujemny w stosunku do liczby.
miejmy nadzieję lepszym przykładem:
NSString *string = <...your source string...>;
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression
regularExpressionWithPattern:@"\\W-?1?[0-9]{2}(\\.[0-9]{1,2})?\\W"
options:0
error:&error];
NSRange range = [regex rangeOfFirstMatchInString:string
options:0
range:NSMakeRange(0, [string length])];
NSString *result = [string substringWithRange:range];
Mam nadzieję, że to pomaga. :)
EDYCJA: poprawiono w oparciu o poniższy komentarz.
'Zakres NSRange *" powinien być 'zasięg NSRange' – Arnaud
Co oznacza "chcesz zrozumieć tę rzecz w wyrażeniu regularnym"? –
chcesz uzyskać wyrażenie regularne, które mogę ocenić w mojej aplikacji na iOS. – Cannon
Czy "-100..100: 0.01" jest dosłownym przedstawieniem, czy możesz podać kilka przykładów. W przeciwnym razie jest to strata czasu. – sln