我在试着确定是哪一张信用卡?并相应地呈现Image。但不知怎么不起作用了,我不知道我是错过了什么,还是我的方法错了?
这是代码片段
它总是呈现最后一部分。

输入后缀图标部件,其中我根据数字呈现容器。
VxState.watch(context, on: [HandleInputChanges]);
TextField(
maxLength: 16,
decoration: InputDecoration(
counter: const Offstage(),
suffixIcon: getCreditCardType(store.moniPay.cardNo) // Here I am rendering image,
hintText: "Input card number",
onChanged: (String? value) {
HandleInputChanges(value.toString(), 'cardno');
})这是getCreditCardType方法
Widget getCreditCardType(String creditCardNumber) {
if (RegExp(r"^4[0-9]{12}(?:[0-9]{3})?$").hasMatch(creditCardNumber)) {
// visa card
return Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/visa.png"),
fit: BoxFit.contain,
),
));
} else if (RegExp(r"^5[1-5][0-9]{14}$").hasMatch(creditCardNumber)) {
// master card
return Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/master.png"),
fit: BoxFit.contain,
),
));
} else if (RegExp(r"^3[47][0-9]{13}$").hasMatch(creditCardNumber)) {
// AExpress card
return Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/american-express.png"),
fit: BoxFit.contain,
),
));
} else if (RegExp(r"^3(?:0[0-5]|[68][0-9])[0-9]{11}$")
.hasMatch(creditCardNumber)) {
// diner card
return Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/dinners-club.png"),
fit: BoxFit.contain,
),
));
} else if (RegExp(r"^6(?:011|5[0-9]{2})[0-9]{12}$")
.hasMatch(creditCardNumber)) {
// discover card
return Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/discover.png"),
fit: BoxFit.contain,
),
));
} else if (RegExp(r"^(?:2131|1800|35\\d{3})\\d{11}$")
.hasMatch(creditCardNumber)) {
// JCB card
return Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/jcb.png"),
fit: BoxFit.contain,
),
));
} else {
return const Icon(Icons.credit_card);
}
}发布于 2022-05-25 07:55:21
对于活动验证,需要确保只有在当前子字符串有效的情况下才能输入每个后续数字。
您可以使用
^5(?:[1-5][0-9]{0,14})?$ # VISA
^5(?:[1-5][0-9]{0,14})?$ # MASTER CARD
^3(?:[47][0-9]{0,13})?$ # AEXPRESS CARD
^3(?:(?:0[0-5]?|[68][0-9]?)[0-9]{0,11})?$ # DINER CARD
^6(?:(?:01{0,2}|5[0-9]{0,2})[0-9]{0,12})?$ # DISCOVER CARD更新后的代码如下所示:
Widget getCreditCardType(String creditCardNumber) {
if (RegExp(r"^4[0-9]{0,15}$").hasMatch(creditCardNumber)) {
// visa card
return Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/visa.png"),
fit: BoxFit.contain,
),
));
} else if (RegExp(r"^5(?:[1-5][0-9]{0,14})?$").hasMatch(creditCardNumber)) {
// master card
return Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/master.png"),
fit: BoxFit.contain,
),
));
} else if (RegExp(r"^3(?:[47][0-9]{0,13})?$").hasMatch(creditCardNumber)) {
// AExpress card
return Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/american-express.png"),
fit: BoxFit.contain,
),
));
} else if (RegExp(r"^3(?:(?:0[0-5]?|[68][0-9]?)[0-9]{0,11})?$")
.hasMatch(creditCardNumber)) {
// diner card
return Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/dinners-club.png"),
fit: BoxFit.contain,
),
));
} else if (RegExp(r"^6(?:(?:01{0,2}|5[0-9]{0,2})[0-9]{0,12})?$")
.hasMatch(creditCardNumber)) {
// discover card
return Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/discover.png"),
fit: BoxFit.contain,
),
));
} else if (RegExp(r"^(?:2(?:1(?:31?)?)?|1(?:80{0,2})?|3(?:5\d{0,3})?)\d{0,11}$")
.hasMatch(creditCardNumber)) {
// JCB card
return Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/jcb.png"),
fit: BoxFit.contain,
),
));
} else {
return const Icon(Icons.credit_card);
}
}发布于 2022-05-24 05:46:32
我尝试了您写下的函数,看起来regex模式只识别信用卡的完整/完整格式。因此,它是“验证正则表达式”而不是“分类正则表达式”。


它不识别不完整的信用卡号码,所以它总是返回最后一部分。

https://stackoverflow.com/questions/72356947
复制相似问题