Demos
Locale based numbers
When you use asNumber or asPercent (and asCurrency see below) it will create a mask for you and inherit the locale from the Eufemia Provider, if the locale property is not given.
You can still define extra mask parameters with numberMask or maskOptions, as the second input example shows (e.g. decimalLimit).
<Provider formElement={{ labelDirection: 'vertical', }} > <Flex.Vertical> <InputMasked label="Number" asNumber maskOptions={{ allowNegative: false, }} value="1234.50" on_change={({ numberValue }) => { console.log(numberValue) }} /> <InputMasked label="Number (decimal limit)" asNumber numberMask={{ decimalLimit: 2, }} value="1234.016" on_change={({ numberValue }) => { console.log(numberValue) }} /> <InputMasked label="Percentage" asPercent numberMask={{ decimalLimit: 1, }} value="1234.016" on_change={({ numberValue }) => { console.log(numberValue) }} /> </Flex.Vertical> </Provider>
Locale based asCurrency
When you use asCurrency it will create a mask for you and inherit the locale from the Eufemia Provider, if the locale property is not given.
<Provider formElement={{ labelDirection: 'vertical', }} > <Flex.Vertical> <InputMasked label="Currency" asCurrency="EUR" value="1234.50" on_change={({ numberValue }) => { console.log(numberValue) }} /> <Provider locale="en-GB" InputMasked={{ currencyMask: { decimalLimit: 3, }, }} > <InputMasked label="Currency" asCurrency="USD" value="1234.567" on_change={({ numberValue }) => { console.log(numberValue) }} /> </Provider> </Flex.Vertical> </Provider>
Define the currencyMask manually
<Provider formElement={{ labelDirection: 'vertical', }} > <Flex.Vertical> <InputMasked label="Left aligned (default)" showMask currencyMask="kr" on_change={({ numberValue }) => { console.log(numberValue) }} /> <InputMasked label="Right aligned" showMask currencyMask={{ currency: 'NOK', }} align="right" on_change={({ numberValue }) => { console.log(numberValue) }} /> </Flex.Vertical> </Provider>
Customize the number mask
<InputMasked label="Masked amount" showMask numberMask={{ suffix: ' kr', allowDecimal: true, }} placeholderChar={null} on_change={({ numberValue }) => { console.log(numberValue) }} />
Using the numberMask with a combined suffix
<InputMasked label="Masked input" value="1000000" numberMask={{ suffix: ',-', allowDecimal: false, }} suffix="kr" on_change={({ numberValue }) => { console.log(parseInt(numberValue || 0, 10)) }} />
Using the numberMask and a prefix
<InputMasked label="Masked input" numberMask={{ prefix: 'NOK ', }} stretch={true} placeholder="Enter a number" on_change={({ numberValue }) => { console.log(numberValue) }} />
Custom mask
This is an example of how you can utilize a custom mask.
For a phone number input, use the Field.PhoneNumber field instead.
<InputMasked label="Custom mask" mask={[ '0', '0', /[4]/, // have to start with 4 /[5-7]/, // can be 5,6 or 7 ' ', /[49]/, // have to start with 4 or 9 /\d/, ' ', /\d/, /\d/, ' ', /\d/, /\d/, ' ', /\d/, /\d/, ]} showMask placeholderChar="_" keepCharPositions on_change={({ numberValue }) => { console.log(numberValue) }} />
Mask with multiple inputs
Allows for the same input functionality as in the DatePicker, but with your own defined inputs.
onChange takes an object with keys based on the step id's. e.g. {month: string, year: string, suffix: string}
import as demonstrated below
import { MultiInputMask } from '@dnb/eufemia/components/input-masked'render(<MultiInputMask />)
<MultiInputMask label="Date" delimiter="/" onChange={({ month, year, suffix }) => console.log({ month, year, suffix, }) } inputs={[ { id: 'month', label: 'the month', placeholderCharacter: 'd', mask: [/[0-9]/, /[0-9]/], }, { id: 'year', label: 'the year', placeholderCharacter: 'm', mask: [/[0-9]/, /[0-9]/], }, { id: 'suffix', label: 'suffix text', placeholderCharacter: '-', mask: [/[a-zA-Z]/, /[a-zA-Z]/, /[a-zA-Z]/], }, ]} />