There are no reviews yet. Be the first to send feedback to the community and the maintainers!
Repository Details
Automatic linking of URLs, phone numbers, emails, handles, and even custom patterns in text for React Native
React Native AutoLink
Auto-Linking component for React Native. Parses text and wraps URLs, phone numbers, emails, social handles, hashtags, and more with Text nodes and onPress handlers.
New in v4: Autolink any pattern using custom regex matchers and click handlers! Thanks @lafiosca!
Installation
npm i react-native-autolink
Usage
Simply import the library and enable the link types you want to auto-link:
importAutolinkfrom'react-native-autolink';constMyComponent=()=>(<Autolink// Required: the text to parse for linkstext="This is the string to parse for urls (https://github.com/joshswan/react-native-autolink), phone numbers (415-555-5555), emails ([email protected]), mentions/handles (@twitter), and hashtags (#exciting)"// Optional: enable email linkingemail// Optional: enable hashtag linking to instagramhashtag="instagram"// Optional: enable @username linking to twittermention="twitter"// Optional: enable phone linkingphone="sms"// Optional: enable URL linkingurl// Optional: custom linking matchersmatchers={[MyCustomTextMatcher]}/>);
Note: No link types are enabled by default as of v4. Be sure to enable one or more (e.g. email, hashtag, phone, etc.) or you won't see anything linked!
Note: All other props (e.g. numberOfLines, style, etc.) will be passed through to the container component, which is either Text (default) or a custom component supplied to the component prop.
component
Type
Required
Default
Description
React.ComponentType
No
Text
Override the component used as the output container.
<Autolinktext={text}component={View}/>
email
Type
Required
Default
Description
boolean
No
true
Whether to link emails (mailto:{email}).
<Autolinktext={text}email={false}/>
hashtag
Type
Required
Default
Description
boolean or string
No
false
Whether to link hashtags to supplied service. Possible values: false (disabled), "facebook", "instagram", "twitter".
Handle link long press events. Signature: (url: string, match: Match) => void.
<Autolinktext={text}onLongPress={(url,match)=>{switch(match.getType()){case'mention':
Alert.alert('Mention long pressed!');default:
Alert.alert('Link long pressed!');}}}/>
phone
Type
Required
Default
Description
boolean or string
No
true
Whether to link phone numbers. Possible values: false (disabled), true (tel:{number}), "sms" or "text" (sms:{number}).
Maximum length of URL link text. Possible values: 0 (disabled), 1+ (maximum length).
<Autolinktext={text}truncate={20}/>
truncateChars
Type
Required
Default
Description
string
No
..
Characters to replace truncated URL link text segments with (e.g. github.com/../repo)
<Autolinktext={text}truncateChars="**"/>
truncateLocation
Type
Required
Default
Description
string
No
"smart"
Override truncation location. Possible values: "smart", "end", "middle".
<Autolinktext={text}truncateLocation="end"/>
url
Type
Required
Default
Description
boolean or object
No
true
Whether to link URLs. Possible values: false (disabled), true, UrlConfig (see below).
typeUrlConfig={// Whether to link URLs prefixed with a scheme (e.g. https://github.com)schemeMatches?: boolean,// Whether to link URLs prefix with www (e.g. www.github.com)wwwMatches?: boolean,// Whether to link URLs with TLDs but not scheme or www prefixs (e.g. github.com)tldMatches?: boolean,};
Whether to use native app schemes (e.g. twitter://) rather than web URLs when linking to services for hashtag and mention links.
Note: Prior to v4, the webFallback prop enabled a check to see whether the user had a particular app installed using Linking.canOpenUrl, falling back to a web link if not. Due to permissions requirements on iOS and upcoming changes on Android, this feature was removed and instead, services will be linked to the web versions by default. Use the useNativeSchemes prop to enable native app linking or use the onPress and/or matchers props to provide your own custom logic for linking and opening apps.
Custom Matchers
Custom matchers allow for complete customization of Autolink. You can match text based on a custom regular expression, supply custom onPress and onLongPress handlers, custom link styles, and even custom functions for creating the text and/or URL for the match.
Custom matchers are particularly useful for matching other types of data that aren't supported out-of-the-box (e.g. international phone numbers) and for mixing internal app navigation links with standard external links within the same block of content.
interfaceCustomMatcher{/* Regular expression pattern to match/link user-specified patterns */pattern: RegExp;/* Custom press handler for links of this type */onPress?: (match: CustomMatch)=>void;/* Custom long-press handler for links of this type */onLongPress?: (match: CustomMatch)=>void;/* Custom styling for links of this type */style?: StyleProp<TextStyle>;/* Custom type/identifier for use with match.getType() */type?: string;/* Custom function for extracting link text using regex replacer args */getLinkText?: (replacerArgs: ReplacerArgs)=>string;/* Custom function for extracting link URL using regex replacer args */getLinkUrl?: (replacerArgs: ReplacerArgs)=>string;}
The ReplacerArgs type supplied to getLinkText and getLinkUrl is an array containing the variadic arguments passed to a replacer function as provided to String.replace. Essentially, element 0 is the entire matched link, and elements 1 through N are any captured subexpressions. More details can be found in the documentation on MDN.
The CustomMatch class supplied to onPress and onLongPress (or their non-custom-matcher companions above) includes a few methods that can be useful as well, e.g. getMatcher() to return the CustomMatcher object and getReplacerArgs to return the same array discussed above.
Custom Matcher Usage
When using the built-in link handling, the getLinkUrl function can be provided to determine the URL to which the link should navigate. Alternatively the onPress function will bypass that entirely, allowing the user to provide custom handling specific to this link type, e.g. for navigating within the application.
The following hypothetical example handles custom @-mention links of the format @[Name](userId), navigating to a user profile screen:
A few custom matchers (e.g. LatLngMatcher, IntlPhoneMatcher, PhoneMatchersByCountry) are already included and available for use. They're just objects so they're easily customizable too! PRs are welcome for additional custom matchers that could be useful to the community.
import{Autolink,LatLngMatcher}from'react-native-autolink';<Autolinktext="Some text with locations 32.123, -117.123"matchers={[LatLngMatcher]}/>;// Or customize the matcherconstMyLatLngMatcher={ ...LatLngMatcher,onPress: ()=>alert('LatLng pressed!')};<Autolinktext={text}matchers={[MyLatLngMatcher]}/>;
Supported By
License
Copyright (c) 2016-2023 Josh Swan
Licensed under the The MIT License (MIT) (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://raw.githubusercontent.com/joshswan/react-native-autolink/master/LICENSE
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.