Jetpack Compose equivalent to InputFilter?

3k Views Asked by At

I'm looking for an equivalent method of EditText's InputFilter in Jetpack Compose TextField.

Because I'm trying to prevent users input unwanted values like %@*()- characters for example.

2

There are 2 best solutions below

0
On BEST ANSWER

There is a solution with Regex here:

@Composable
fun FilteredTextField(
    text: String,
    onChanged: (String) -> Unit,
    ignoredRegex: Regex
) {
    TextField(value = text,
        onValueChange = {
            if (!it.contains(ignoredRegex)) onChanged(it)
        }
    )
}

Using:

@Composable
fun FilteredTextFieldDemo() {
    var text by remember { mutableStateOf("") }
    FilteredTextField(
        text = text,
        onChanged = { text = it },
        ignoredRegex = Regex("[%@*()-]")
    )
}
0
On

If you just want to display the numberOnly keyboard, we can do this way:

TextField(
     value = textState,
     onValueChange = { text ->
         textState = text
     },
     keyboardOptions = KeyboardOptions.Default.copy(
         keyboardType = KeyboardType.NumberPassword
     ),
     visualTransformation = VisualTransformation.None
)