diff --git a/Libraries/Text/RCTTextAttributes.m b/Libraries/Text/RCTTextAttributes.m index a66386885b4..01131cfb20e 100644 --- a/Libraries/Text/RCTTextAttributes.m +++ b/Libraries/Text/RCTTextAttributes.m @@ -237,6 +237,23 @@ NSString *const RCTTextAttributesTagAttributeName = @"RCTTextAttributesTagAttrib return effectiveBackgroundColor ?: [UIColor clearColor]; } +static NSString *capitalizeText(NSString *text) +{ + NSArray *words = [text componentsSeparatedByString:@" "]; + NSMutableArray *newWords = [NSMutableArray new]; + NSNumberFormatter *num = [NSNumberFormatter new]; + for (NSString *item in words) { + NSString *word; + if ([item length] > 0 && [num numberFromString:[item substringWithRange:NSMakeRange(0, 1)]] == nil) { + word = [item capitalizedString]; + } else { + word = [item lowercaseString]; + } + [newWords addObject:word]; + } + return [newWords componentsJoinedByString:@" "]; +} + - (NSString *)applyTextAttributesToText:(NSString *)text { switch (_textTransform) { @@ -248,7 +265,7 @@ NSString *const RCTTextAttributesTagAttributeName = @"RCTTextAttributesTagAttrib case RCTTextTransformUppercase: return [text uppercaseString]; case RCTTextTransformCapitalize: - return [text capitalizedString]; + return capitalizeText(text); } } diff --git a/packages/rn-tester/js/examples/Text/TextExample.android.js b/packages/rn-tester/js/examples/Text/TextExample.android.js index 2efb193a634..f1f15a242fe 100644 --- a/packages/rn-tester/js/examples/Text/TextExample.android.js +++ b/packages/rn-tester/js/examples/Text/TextExample.android.js @@ -798,6 +798,18 @@ class TextExample extends React.Component<{...}> { This text should be CAPITALIZED. + + Capitalize a date: + + the 9th of november, 1998 + + + + Capitalize a 2 digit date: + + the 25th of december + + Mixed: uppercase LoWeRcAsE diff --git a/packages/rn-tester/js/examples/Text/TextExample.ios.js b/packages/rn-tester/js/examples/Text/TextExample.ios.js index 623900fc9d9..b6272d55931 100644 --- a/packages/rn-tester/js/examples/Text/TextExample.ios.js +++ b/packages/rn-tester/js/examples/Text/TextExample.ios.js @@ -1160,6 +1160,18 @@ exports.examples = [ This text should be CAPITALIZED. + + Capitalize a date: + + the 9th of november, 1998 + + + + Capitalize a 2 digit date: + + the 25th of december + + Mixed: uppercase LoWeRcAsE