gpt4 book ai didi

javascript - Javascript 中的信用卡预测

转载 作者:搜寻专家 更新时间:2023-11-01 04:19:13 25 4
gpt4 key购买 nike

我正在编写一个工具,onkeydown 将运行在输入框中输入的当前值,以检查它是否与 4 种主要信用卡类型之一的正则表达式相匹配。

我觉得它有点管用,但它很不稳定,所以我想弄清楚是什么导致它给出错误的响应(例如,有时它会输出 2 个值而不是一个)。是因为我需要在循环之前设置一个标志变量吗?在匹配正确的卡片后,我只是从对象的循环中返回,所以我认为这就足够了......

正则表达式的标准来自 this site :

  • Visa:^4[0-9]{12}(?:[0-9]{3})?$ 所有 Visa 卡号以 4 开头。新卡有 16 位数字。旧卡有13张。

  • MasterCard:^5[1-5][0-9]{14}$ 所有 MasterCard 卡号都以数字 51 到 55 开头。所有有 16 位数字。

  • American Express:^3[47][0-9]{13}$ American Express 卡号以 34 或 37 开头,共有 15 位数字.

  • 发现:^6(?:011|5[0-9]{2})[0-9]{12}$发现卡号码以 6011 或 65 开头。均有 16 位数字。

    $(function() {

    var $cardNumber = $('#js-cardnumber');

    var ccMap = {};

    ccMap.cards = {
    'amex': '^3[47][0-9]{13}$',
    'discover': '^6(?:011|5[0-9]{2})[0-9]{12}$',
    'mastercard': '^5[1-5][0-9]{14}$',
    'visa': '^4[0-9]{12}(?:[0-9]{3})?$'
    };


    $cardNumber.keydown(function() {
    for (var cardType in ccMap.cards) {
    if (ccMap.cards.hasOwnProperty(cardType)) {
    var regex = ccMap.cards[cardType];
    if (regex.match($(this).val())) {
    console.log(cardType);
    return;
    }
    }
    }
    });
    });​

Here's a fiddle

最佳答案

您似乎以错误的方式使用了正则表达式。

如果要根据正则表达式检查字符串,可以使用字符串的match()方法:

string.match(regexp) // returns boolean

你做错了:

if ( regex.match($(this).val()) ) {

尝试将当前值解释为正则表达式。必须是这样:

if ( $(this).val().match(regex) ) {

您还可以缓存正则表达式以提高脚本的效率:

ccMap.cards = {
'amex': /^3[47][0-9]{13}$/, // store an actual regexp object, not a string
// ...

// The way you test changes, now you're able to use the "test"
// method of the regexp object:
if ( regex.test($(this).val()) ) {

关于javascript - Javascript 中的信用卡预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11917625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com