diff --git a/stripe/res/layout/card_input_widget.xml b/stripe/res/layout/card_input_widget.xml
index 08c3fce9d90..d6ec59e6776 100644
--- a/stripe/res/layout/card_input_widget.xml
+++ b/stripe/res/layout/card_input_widget.xml
@@ -76,8 +76,7 @@
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:imeOptions="actionNext"
- android:inputType="date"
- android:maxLength="5"
+ android:digits="@string/stripe_expiration_date_allowlist"
android:hint="@string/expiry_date_hint"
style="@style/Stripe.CardInputWidget.EditText"
/>
diff --git a/stripe/res/layout/card_multiline_widget.xml b/stripe/res/layout/card_multiline_widget.xml
index 437df78c69f..4fe5dc3fe34 100644
--- a/stripe/res/layout/card_multiline_widget.xml
+++ b/stripe/res/layout/card_multiline_widget.xml
@@ -49,8 +49,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionNext"
- android:inputType="date"
- android:maxLength="@integer/stripe_date_length"
+ android:digits="@string/stripe_expiration_date_allowlist"
android:nextFocusDown="@+id/et_cvc"
android:nextFocusForward="@+id/et_cvc"
/>
diff --git a/stripe/res/values/donottranslate.xml b/stripe/res/values/donottranslate.xml
index 2ac15e205fc..1a943733391 100644
--- a/stripe/res/values/donottranslate.xml
+++ b/stripe/res/values/donottranslate.xml
@@ -5,6 +5,7 @@
CVV
123
1234
+ 0123456789/
12345
ยทยทยทยท%1$s
diff --git a/stripe/src/main/java/com/stripe/android/view/ExpiryDateEditText.kt b/stripe/src/main/java/com/stripe/android/view/ExpiryDateEditText.kt
index 6d9f9235afb..17ddcdd2b7b 100644
--- a/stripe/src/main/java/com/stripe/android/view/ExpiryDateEditText.kt
+++ b/stripe/src/main/java/com/stripe/android/view/ExpiryDateEditText.kt
@@ -3,6 +3,8 @@ package com.stripe.android.view
import android.content.Context
import android.os.Build
import android.text.Editable
+import android.text.InputFilter
+import android.text.InputType
import android.util.AttributeSet
import android.view.View
import android.widget.EditText
@@ -20,6 +22,13 @@ class ExpiryDateEditText @JvmOverloads constructor(
) : StripeEditText(context, attrs, defStyleAttr) {
init {
+ inputType = InputType.TYPE_CLASS_NUMBER
+ filters = listOf(
+ InputFilter.LengthFilter(
+ context.resources.getInteger(R.integer.stripe_date_length)
+ )
+ ).toTypedArray()
+
setErrorMessage(resources.getString(R.string.invalid_expiry_year))
listenForTextChanges()