如何在科特林中使用正则表达式获取整数?
How to get integer with regular expression in kotlin?
ViewModel
fun changeQty(textField: TextFieldValue) {
val temp1 = textField.text
Timber.d("textField: $temp1")
val temp2 = temp1.replace("[^\d]".toRegex(), "")
Timber.d("temp2: $temp2")
_qty.value = textField.copy(temp2)
}
文本字段
OutlinedTextField(
modifier = Modifier
.focusRequester(focusRequester = focusRequester)
.onFocusChanged {
if (it.isFocused) {
keyboardController?.show()
}
},
value = qty.copy(
text = qty.text.trim()
),
onValueChange = changeQty,
label = { Text(text = qtyHint) },
singleLine = true,
keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Number,
imeAction = ImeAction.Done
),
keyboardActions = KeyboardActions(
onDone = {
save()
onDismiss()
}
)
)
设置KeyboardType.Number,显示1,2,3,4,5,6,7,8,9和,。 - space。
我只想得到像 -10 或 10 或 0 这样的整数。
但我输入 , 或 。或 -(不是前面的标志),它按原样显示。
例如)
键入 = -10----------
希望=-10
显示=-10--------
我把正则表达式放在
val temp2 = temp1.replace("[^\d]".toRegex(), "")
但是,它似乎不起作用。
我怎么只能得到整数(也是负整数)?
使用此正则表达式 (?<=(\d|-))(\D+)
替换所有非数字字符,除了第一个 -
。
fun getIntegersFromString(input: String): String {
val pattern = Regex("(?<=(\d|-))(\D+)")
val formatted = pattern.replace(input, "")
return formatted
}
ViewModel
fun changeQty(textField: TextFieldValue) {
val temp1 = textField.text
Timber.d("textField: $temp1")
val temp2 = temp1.replace("[^\d]".toRegex(), "")
Timber.d("temp2: $temp2")
_qty.value = textField.copy(temp2)
}
文本字段
OutlinedTextField(
modifier = Modifier
.focusRequester(focusRequester = focusRequester)
.onFocusChanged {
if (it.isFocused) {
keyboardController?.show()
}
},
value = qty.copy(
text = qty.text.trim()
),
onValueChange = changeQty,
label = { Text(text = qtyHint) },
singleLine = true,
keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Number,
imeAction = ImeAction.Done
),
keyboardActions = KeyboardActions(
onDone = {
save()
onDismiss()
}
)
)
设置KeyboardType.Number,显示1,2,3,4,5,6,7,8,9和,。 - space。 我只想得到像 -10 或 10 或 0 这样的整数。 但我输入 , 或 。或 -(不是前面的标志),它按原样显示。
例如) 键入 = -10----------
希望=-10
显示=-10--------
我把正则表达式放在
val temp2 = temp1.replace("[^\d]".toRegex(), "")
但是,它似乎不起作用。 我怎么只能得到整数(也是负整数)?
使用此正则表达式 (?<=(\d|-))(\D+)
替换所有非数字字符,除了第一个 -
。
fun getIntegersFromString(input: String): String {
val pattern = Regex("(?<=(\d|-))(\D+)")
val formatted = pattern.replace(input, "")
return formatted
}