<primer-input-card-number>
Secure, PCI-compliant input for card numbers. Automatically detects and displays card network (Visa, Mastercard, etc.) as user types.Quick Reference
| Parent | <primer-card-form> |
| Properties | label, placeholder, aria-label |
| Features | Network detection, auto-formatting |
Examples
Default
Custom Labels
No Placeholder
In Custom Layout
Properties
| Property | Attribute | Type | Default | Description |
|---|---|---|---|---|
label | label | string | "Card Number" | Label text |
placeholder | placeholder | string | "4111 1111 1111 1111" | Placeholder text |
ariaLabel | aria-label | string | Value of label | Screen reader label |
"":
label: Reverts to defaultplaceholder: Shows no placeholderaria-label: Useslabelvalue
Card Network Detection
Automatically detects:| Network | Example Prefix |
|---|---|
| Visa | 4xxx |
| Mastercard | 5xxx |
| Amex | 34xx, 37xx |
| Discover | 6011 |
Validation
Validates:- Number length matches detected network (e.g., 16 for Visa, 15 for Amex)
- At least one digit entered
Events
<primer-input-card-number> does not emit its own events. Validation and submission are managed by the parent <primer-card-form>.
Relevant Parent Events
| Event | Emitted by | How it affects this input |
|---|---|---|
primer:card-submit | <primer-card-form-submit> or external dispatch | Triggers validation — if this input is invalid, an error message displays below it |
primer:card-error | <primer-card-form> | Emitted when any card input fails validation — payload includes all validation errors |
primer:card-success | <primer-card-form> | Emitted when the form submits successfully |
Reacting to card validation errors
CSS Properties
This component uses the shared Input Styling Tokens.Layout
| Property | Description | Default |
|---|---|---|
--primer-space-small | Gap between input and network icon | 8px |
Typography
| Property | Description | Default |
|---|---|---|
--primer-typography-body-large-size | Input text size | 16px |
--primer-typography-body-large-weight | Input text weight | 400 |
--primer-typography-body-small-size | Label text size | 12px |
Colors
| Property | Description |
|---|---|
--primer-color-text-primary | Input text color |
--primer-color-text-placeholder | Placeholder text color |
--primer-color-text-disabled | Disabled text color |
--primer-color-text-negative | Error message color |
Border & Background
| Property | Description |
|---|---|
--primer-radius-small | Input border radius |
--primer-color-border-outlined-default | Default border |
--primer-color-border-outlined-focus | Focus border |
--primer-color-border-outlined-error | Error border |
--primer-color-background-outlined-default | Default background |
Animation
| Property | Description | Default |
|---|---|---|
--primer-animation-duration | Transition duration | 200ms |
--primer-animation-easing | Transition easing | cubic-bezier(0.44, 0, 0.4, 1) |
States
| State | Description | Visual Change |
|---|---|---|
| Default | Initial state | Standard border and background |
| Hover | Mouse over input | Border darkens slightly |
| Focus | Input is focused | Blue border, increased width |
| Filled | Valid card number entered | Network icon displayed |
| Error | Invalid input or validation failed | Red border, error message below |
| Disabled | Form or input disabled | Muted colors, no interaction |
Usage Guidelines
Do
- Place inside
<primer-card-form> - Use for card number collection only
Don’t
- Don’t use
<primer-card-network-selector>separately (internal component) - Don’t place outside card form context
Content Guidelines
Label
| Do | Don’t |
|---|---|
| ”Card number" | "Credit card number” (not all cards are credit) |
| Use sentence case | ”CARD NUMBER” |
Placeholder
| Do | Don’t |
|---|---|
1234 1234 1234 1234 (formatted example) | “Enter your card number” (redundant with label) |
| Empty placeholder (clean look) | A partial number like 4111 |
Error messages
| Do | Don’t |
|---|---|
| ”Enter a valid card number" | "Invalid" |
| "Card number is incomplete" | "Error in field” |
Related
- primer-card-form — Parent container
- primer-input-card-expiry — Expiry input
- primer-input-cvv — CVV input