RSS

  • YouTube
  • LinkedIn
  • 谷歌

档案 : 发展

用于 Java 脚本的 CPF 验证代码

下面的代码来自一个经过优化的 Javascript 函数,具有最少的 圈复杂度 我根据文章中的解释得到的行 巴西公积金验证方法 - 个人注册. 在第二个数字化测试仪的计算时略有变化. 而不是从第二个数字开始, 代码从第一个开始并使用值 11 作为乘数. 另一个明显的变化是,为了避免比较知道我们是否在第九位和十进制数字, 我将值零分配给最后一个元素 (指数 10) 减少一个比较.

使用的算法是 1 在文章中进行了解释,并且有一个小技巧可以避免与其他等于 10 这是制作模块 10 其余的.

   // Codigo que valida um CPF informado quanto a validade de seus dígitos verificadores.

const validarCpf = (cpf) => {
  if (cpf.length !== 11) { // Supõe-se já vir filtrado o valor
    return false;
  }
  let elementos = cpf.split(''); // convertendo a string em array
  elementos[10] = 0; // Forçando ao valor da ultima multiplicacao ser zero
  let somaA = 0;
  let somaB = 0;

  elementos.reduce(function(i, valor, indice) {
    let multiplicador = 11 - indice;
    somaB += (valor * multiplicador);
    somaA += (valor * (multiplicador > 2 ? multiplicador - 1 : 0));
  }, somaA);
  let moduloA = ((somaA * 10) % 11) % 10;
  let moduloB = ((somaB * 10) % 11) % 10;
  return cpf.replace(/\d{9}(\d{2})$/g, '$1') == ("" + moduloA + moduloB);
}

您可以测试此代码 这里.

针对 PHP 的公积金验证代码

下面的代码是一个PHP函数,根据文章中的解释,优化为具有最少的圈复杂度 巴西公积金验证方法 - 个人注册. 在第二个数字化测试仪的计算时略有变化. 而不是从第二个数字开始, 代码从第一个开始并使用值 11 作为乘数. 另一个明显的变化是,为了避免比较知道我们是否在第九位和十进制数字, 我将值零分配给最后一个元素 (指数 10) 减少一个比较.

使用的算法是 1 在前面引用的文章中进行了解释,并且有一个小技巧可以避免与其他等于 10 这是制作模块 10 其余的.

   // Codigo que valida um CPF informado quanto a validade de seus dígitos verificadores.

   /**
     * 
     * Verifica se um CPF é válido
     * @author Marcos Regis <marcos@marcosregis.com>
     * @param  string $cpf
     * @return bool
     */
    function validar(string $cpf): bool
    {
        if (strlen($cpf) != 11) {
            return false;
        }
        $elementos = (array)str_split($cpf);
        $elementos[10] = 0; // Reduz uma comparação no calculo de $somaB
        $somaA = 0;
        $somaB = 0;
        foreach ($elementos as $indice => $elemento) {
            $multiplicador = count($elementos) - $indice;
            $somaA += (int)$elemento * (int)($multiplicador > 2 ? $multiplicador - 1 : 0);
            $somaB += (int)$elemento * (int)$multiplicador;
        }

        $moduloA = (($somaA * 10) % 11) % 10;
        $moduloB = (($somaB * 10) % 11) % 10;

        return preg_replace('#\d{9}(\d{2})$#', '$1', $cpf) == $moduloA . $moduloB;
    }

您可以测试此代码 这里.

Algoritimo de validação de CPF brasileiro –; 个人注册

在本文中,我将逐步解释算法的转换,以验证 CPF 到 PHP 代码的有效性.

如果您已经知道算法并希望直接转到可用代码, 请单击此处.

但什么是公积金?

公积金是个人注册的首字母缩写. 这是目前由国税局管理和发布的一些巴西文件. 每个巴西人都有权 (或职责) 拥有一个并且只有它才能访问银行服务, 报名参加公立本科课程, 通过公开招标上任, 有信用卡, 除其他例子外.

森林合作伙伴关系的组成

公积金由以下部分组成: 十一位数字, 和 最后三位数字 具有我们将在下面解释的含义.

第九位数字, 从左到右阅读, 表示 税务区域 发行地. 从 0 到 9 的数字有十个区域,如下表所示.

1 –DF, 去, 女士, MT 和 TO
2 –交流, 是, 美联社, PA, 反渗透和反渗透
3 –电子商务, 硕士和圆周率
4 –铝, 铅, 体育, 注册护士
5 - 学士和东南
6 –毫克
7 - ES 和 RJ
8 –SP
9 - 公关和SC
0 - RS

前八位数字是基数.

最后两位数字是结帐数字.

这些数字是根据以下规则计算前九位数字生成的:

第一位数字检查器

对于第一个数字, 我们拿了 8 第一个数字,然后将它们中的每一个乘以一个以 10 以及我们向右推进的程度, 我们减少 1 这个乘数,我们将所有结果相加.

为了更好地理解, 拿 123.456.789-扎伊 作为CPF具有数字的示例 扎伊 故意.

1 x 10 = 10
2 x 9 = 18
3 x 8 = 24
4 x 7 = 28
5 x 6 = 30
6 x 5 = 30
7 x 4 = 28
8 x 3 = 24
9 x 2 = 18
添加 10 + 18 + 24 + 28 + 30 + 30 + 28 + 24 + 18 有 210.

现在, 获得总数后,我们有两种方法可以到达数字检查器.

方法 1

乘 210 由 10, 我们除以 11 剩下的我们拿走了.

然后我们有: 210 x 10 = 2.100

2.100 / 11 = 190 休息 10.

如果其余的是 10 检查数字为零, 否则, 其余的是检查数字.

在我们的案例, 其余等于 10 第一个数字将是 0 (零).

方法 2

我们得到其余的划分 210 由 11.

然后我们有: 210 / 11 等于 19 休息 1.

这是其余时间的规则 0 (零) 或 1 (一). 发生这种情况时,检查器数字为 , 否则我们减去其余的 11 获取检查数字.

就我们的情况而言, 当我们休息时 1, 我们的第一个校验位将是 0 (零).

第二位数字检查器

获取第二位检查器, 我们将第一个校验位添加到 9 初始数字,我们再次执行与第一个数字相同的过程, 不同之处在于我们现在从第二个数字开始.

我们的公积金已经具有价值 123.456.789-0X 必要的操作如下.
2 x 10 = 20
3 x 9 = 27
4 x 8 = 32
5 x 7 = 35
6 x 6 = 36
7 x 5 = 35
8 x 4 = 32
9 x 3 = 27
0 x 2 = 0
添加 20 + 27 + 32 + 35 + 36 + 35 + 32 + 27 + 0 有 244.

现在, 获得总数后,我们应该使用已经解释过的两种方法之一来获得校验位.

方法 1

乘 244 由 10, 我们除以 11 剩下的我们拿走了.

然后我们有: 244 x 10 = 2.440

2.440 / 11 = 221 休息 9.

如果其余的是 10 检查数字为零, 否则, 其余的是检查器数字,在我们的例子中,我们有 9 作为第二位数字检查器.

方法 2

我们得到其余的划分 244 由 11.

然后我们有: 244 / 11 等于 22 休息 2.

请记住,我们有一个规则,其余的什么时候 0 (零) 或 1 (一) 检查数字为零.

如果大于 1 从 11 获取检查数字.

就我们的情况而言, 有 11 ; 2 = 9 作为我们的第二位数字检查器,它与该方法中获得的值相同 1.

公积金有发行限额?

理论上, 我们最多可以有 10^8 或 100.000.000 (一亿) 每个区域的可能组合. 在实践中,由于不使用重复的数字,我们的数字少了一点, 举个例子. 虽然看起来是一个相当大的数字, 它应该在某个时候翻新, 因为即使一个人死了也不能重复使用.

假设它们已经存在于该地区 8 (在圣保罗住宿) 大约 40 发行了数百万份公积金 (我无法获得可靠的数据 2022 所以我使用的常住人口的大致数量是 44,5 数百万人), 将大约留下 60 数以百万计的公积金可用. 以目前公积金的增长率 (年份 2022) 在关于 600 一年一千, 系统应保持在正下方 100 年.

我们在关于公积金组成的解释和示例的最后来到这里. 我们的公积金样本是 123.456.789-09. 下面我们有一些代码示例,用于生成结帐数字, 验证它们多少.

代码

版本 PHP.

版本 Javascript.

乌本图上的码头. 服务 nginx 无法生成: ADD 失败: 统计 /var/lib/docker/tmp/docker-builder(;)/startup.sh: 没有这样的文件或目录

乌本图的码头

有时, 使用拉多克时, 在尝试容器重建后,将发生此错误。 no such file or directory 消息上 docker-compose up -d –build nginx 命令.

我不清楚什么是实际问题, 但运行命令与sudo, 我们可以成功运行它.

Seems that the regular user need access rights to directory /var/lib/docker/tmp/ but do not have. So, running with sudo the trouble is bypassed and the build can finished normally.

使用 sudo 构建容器后, 可以卸载它,并重新加载,而无需 sudo.

数据表 + Html 5 出口按钮 + 拉拉维尔-米格 (网络包)

在最后的日子里, 我遇到一个问题,试图使用 数据表 引导 4 支持将结果导出到 Excel Pdf 使用 拉拉维尔-米格. 数小时后,尝试将所有脚本协同工作, 我终于赢了. 所以, 我决定写这个小 如何 对于那些有同样麻烦的人.



继续阅读 > >

使用 jQueryMask 插件在不同模式下设置日期格式

jQuery 掩码插件 是一个伟大的 Javascript 库, 用于格式化字段以供演示和/或强制用户正确输入.

这里, 我演示如何处理输入或其他 HTML 元素, 以便在源日期与目标元素的格式不同时显示日期.

示例:

  • 我们有一个日期时间与 年-月-日小时:分钟:秒 只需要显示 年/月/日 部分.
  • 我们有一个日期在 年月日 并需要格式化为 日/月/年.

jQueryMask 是非常简单的使用. 它不需要太多, 以掩盖任何你需要的. 看看他的网站上的例子.

如果需要设置简单日期字段的格式 (即使在非输入元素中), 只需使用下面的代码.

jQuery('[数据角色 ="日期"]).面具("TC99/M9/D9", {
        占 位 符: "____/__/__",
        翻译: {
            "D": {模式: /[0-3]/, 选: 假, 递 归: 真正的},
            "M": {模式: /[01]/, 选: 假, 递 归: 真正的},
            "T": {模式: /[12]/, 选: 假, 递 归: 真正的},
            "C": {模式: /[09]/, 选: 假, 递 归: 真正的}
        }
    });

上面的代码可以对日期进行掩码和预验证。 年/月/日 格式.

输入像

<;输入类型 ="文本" 数据角色 ="日期" 值 ="2018-06-11 15:47" />;

将改变他的价值 2018/06/11.

如果您尝试键入另一个日期 (清除后, 答案是肯定的) 您不能从不同的数字开始 1 或 2. 这是因为我们的面具有一个翻译要做时, 允许字符. 如果模式不匹配, 字符被擦除.

The meaning of “;TC99/M9/D9; 掩码是:

  • 必须从 1 或 2 (翻译 T: /[12]/ ; 自定义格式)
  • 必须有数字 0 或 9 (翻译 C: /[09]/ ; 自定义格式)
  • 必须有一个数字 (任何) (翻译 9 ; MaskPlugin 核心格式)
  • 必须有一个数字 (任何) (翻译 9 ; MaskPlugin 核心格式)
  • 斜线将自动添加 ( / )
  • 必须有数字 0 或 1 (翻译 M: /[01]/ ; 自定义格式)
  • 必须有一个数字 (任何) (翻译 9: MaskPlugin 核心格式)
  • 斜线将自动添加 ( / )
  • 必须有数字 0, 1, 2 或 3 (翻译 D: /[0-3]/ ; 自定义格式)
  • 必须有一个数字 (任何) (翻译 9: MaskPlugin 核心格式)

答案是肯定的, 没有真正的验证. You can type “;2999/19/39; 这不是一个有效的日期, 但几乎完成.

所以, 以另一种方式格式化, 只是更改掩码参数顺序.

但, 如果源日期的模式不同, 如月/日/年, 掩码不工作. The date output for “;06/11/2018 15:40; will be weird “;1018/15/0;.

要处理不同的日期格式, 需要的不仅仅是简单的掩码. 我们将需要一个函数.

查看下面的代码

        var maskBehaviorDateTime = 函数 (瓦尔, 和, 领域) { // 这个函数必须返回一个掩码 "TC99/M9/D9"; // 我们所期望的格式 var v = 字段。(输入) ? 字段. val() : 字段. 文本(); // 是一个输入或另一个 html 元素??
                    v = v 替换(/\D/克, ''); // 条带非数字, 如果 (V != '') { // 具有价值?
                        如果 ((/^[01]\D[0-3]\d  d{4}$/).测试(V)) { //测试模式匹配月份/日/年仅 v = v 替换(/^(\D{4})(\D{2})(\D{2})$/, ' $ 3/$ 2/$ 1 ');
                        } 否则, 如果 ((/^[01]\D[0-3]\d  d{4}[012]\D[0-5]\d $/).测试(V)) { //测试模式匹配月份/日/年小时:分钟 v = v 替换(/^(\D{2})(\D{2})(\D{4})(\D{2})(\D{2})$/, ' $ 3/$ 2/$ 1 ');
                            // 如果我们需要显示小时和分钟, 返回的掩码也必须更改
                            // v = v 替换(/^(\D{2})(\D{2})(\D{4})(\D{2})(\D{2})$/, $ 3/2 元/1 元 $4:$5');
                            // msk = ' TC99/M9/D9 h9:m9 '; // 必须在翻译选项中存在 h 和 m
                        }
                        字段。(输入) ? 字段. val(V) : 字段. 文本(V);
                    }
                    返回 msk;
                },
                optionsDateTime = {
                    占 位 符: "____/__/__",
                    翻译: {
                        "D": {模式: /[0-3]/, 选: 假, 递 归: 真正的},
                        "M": {模式: /[01]/, 选: 假, 递 归: 真正的},
                        "T": {模式: /[12]/, 选: 假, 递 归: 真正的},
                        "C": {模式: /[09]/, 选: 假, 递 归: 真正的},
                        "H": {模式: /[0-2]/, 选: 真正的, 递 归: 真正的},
                        "m": {模式: /[0-5]/, 选: 真正的, 递 归: 真正的}
                    }
                };
        jQuery('[数据角色 ="日期"]').面具(maskBehaviorDateTime,  optionsDateTime);

现在我们有两种翻译模式 (h 和 m). H 表示 n 索引位置必须有数字 0, 1 或 2 和 m 之间的数字 0 和 5. 请记住, 案件事项.

使用上面的代码, 我们可以通过多种方式格式化和显示日期. 只是改变 .测试().取代() 模式以填充所需的模式.

这是我使用的代码, 用于格式化数据库日期时间字段 (以年月份为日期)。:分钟:第二个 html 元素的日期/年/月小时:分钟

    var maskBehaviorDateTime = 函数 (瓦尔, 和, 领域) {
            // 如果已经有一个值, 标准 dd/mm/日化的格式与可选的 hh:毫米:无功 msk = "TC99/M9/D9 h9:m9:s9";
            如果 (attr 领域。("原始日期-值") == 未定义) {
                var o = 字段。(输入) ? 字段. val() : 字段. 文本();
            } 还 {
                var attr = 字段。("原始日期-值");
            }
            v = 替换(/\D/克, '');
            如果 (V != '') {
                attr 领域。("原始日期-值") == undefined &;&; attr 领域。("原始日期-值", 的);
                如果 ((/^[12][09]\D{2}[01]\D[0123]\d $/).测试(V)) { // 年/月/日 v = v 替换(/^(\D{4})(\D{2})(\D{2})$/, ' $ 3/$ 2/$ 1 ');
                    msk = "D9/M9/TC99";
                } 否则, 如果 ((/^[12][09]\D{2}[01]\D[0123]\D[012]\D[0-5]\d $/).测试(V)) { // 年/月/日小时:分钟 v = v 替换(/^(\D{4})(\D{2})(\D{2})(\D{2})(\D{2})$/, $ 3/2 元/1 元 $4:$5');
                    msk = "D9/M9/TC99 h9:m9";
                } 否则, 如果 ((/^[12][09]\D{2}[01]\D[0123]\D[012]\D[0-5]\D[0-5]\d $/).测试(V)) { // 年/月/日小时:分钟:第二 v = v 替换(/^(\D{4})(\D{2})(\D{2})(\D{2})(\D{2})(\D{2})$/, $ 3/2 元/1 元 $4:$5:$6');
                    msk = "D9/M9/TC99 h9:m9:s9";
                }
                字段。(输入) ? 字段. val(V) : 字段. 文本(V);
            }

            返回 msk;
        },
        optionsDateTime = {
            占 位 符: "__/__/____",
            翻译: {
                "D": {模式: /[0-3]/, 选: 假, 递 归: 真正的},
                "M": {模式: /[01]/, 选: 假, 递 归: 真正的},
                "T": {模式: /[12]/, 选: 假, 递 归: 真正的},
                "C": {模式: /[09]/, 选: 假, 递 归: 真正的},
                "H": {模式: /[0-2]/, 选: 真正的, 递 归: 真正的},
                "m": {模式: /[0-5]/, 选: 真正的, 递 归: 真正的},
                "s": {模式: /[0-5]/, 选: 真正的, 递 归: 真正的}
            },
        };
    jQuery('[数据角色 ="日期"]').面具(maskBehaviorDateTime,  optionsDateTime);

输入像

<;输入类型 ="文本" 数据角色 ="日期" 值 ="2018-06-11 15:40">;

输出将

11/06/2018 15:40

希望这能帮到你!

在 PDO SQL 语句中绑定多个值 (PDOStatement)

有时, 我们需要在生成 SQL 指令时通过几个列搜索单个值.

假设下表

  • [ENTITY_ONE]
    • Id
    • COLUMN_A
    • COLUMN_B
    • COLUMN_C
    • COLUMN_D
    • COLUMN_E

如果需要搜索列上的单个值 B,DE 我们将需要使用以下指令

选择 ID, COLUMN_A,(...列。。), COLUMN_E 从 ENTITY_ONE 那里 COLUMN_B 喜欢 '%search_value% ' 或 COLUMN_D 象 '%search_value% ' 或 COLUMN_E 象 '%search_value% ';

在 PHP 代码中, 我们可以做

$q = '%search_value% ';
$sql = "选择 * 从 ENTITY_ONE 那里 COLUMN_B 喜欢 ' $q ' 或 COLUMN_D 喜欢 ' $q ' 或 COLUMN_E 喜欢 ' $q '; 
$pdo = 新的 pdo($Dsn, $用户, $通过); 
$stmt = $pdo->;查询($Sql);

很好, this can work but we know that isn’;最好的方法. 我们需要使用绑定值来避免 SQL 注入和其他恶意处理.

所以, 代码可以修改为

$q = '%search_value% '; 
$sql = "选择 * 从COLUMN_B喜欢的地方ENTITY_ONE ? 或COLUMN_D喜欢 ? 或COLUMN_E喜欢 ?; 
$阿格斯= [$问, $问, $问]; // 我们每个条目需要一个条目 "?" on instruction
$pdo = new PDO($Dsn, $用户, $通过); 
$stmt = $pdo->;准备($Sql);
$stmt->;执行($阿格斯);

好多了, 但, 构建复杂的 SQL 指令时, things can be confusing with lots of arguments and don’;别忘了: 订单事项.

愉快的 PDO 可以在使用命名绑定时以不同的顺序绑定值.

$q = '%search_value% '; 
$sql = "选择 * 从COLUMN_B喜欢的地方ENTITY_ONE :first_arg或COLUMN_D喜欢 :second_arg或COLUMN_E喜欢 :third_arg; 

$pdo = 新的 pdo($Dsn, $用户, $通过); 
$stmt = $pdo->;准备($Sql); 
// One way
$args = [':first_arg' =>; $问, ':third_arg' =>;$问, ':second_arg' =>; $问]; // 我们每个条目需要一个条目 ":名字" on instruction 
$stmt->;执行($阿格斯); 
// Another way
$stmt->;bindValue(':third_arg '. $问);
$stmt->;bindValue(':first_arg ', $问); 
$stmt->;bindValue(':second_arg ', $问);

$stmt->;执行(); 

嗯, seems that this isn’;不够好. 我们只改变使用 1-索引占位符 到一个 :命名占位符. There’;没有超出代码可读性的增益, 并且有可能以任何顺序绑定.

是的, 但现在我们可以做最好的方法时, 使用一个独特的搜索词在几列. 我们只能使用一个绑定到一个或多个 :named placeholders ’;因为 PDO 聪明聪明. 看我们的最终代码在这里.

$q = '%search_value% '; 
$sql = "选择 * 从COLUMN_B喜欢的地方ENTITY_ONE :unique_arg或COLUMN_D喜欢 :unique_arg或COLUMN_E喜欢 :unique_arg; 
$pdo = 新的 pdo($Dsn, $用户, $通过); 
$stmt = $pdo->;准备($Sql); 
// One way 
$args = [':unique_arg' =>; $问]; // 我们可以绑定所有 :name with only one term 
$stmt->;执行($阿格斯); 
// Another way 
$stmt->;bindValue(':unique_arg', $问); 
$stmt->;执行(); 

使用相同的参数编写许多 SQL 指令时可以节省大量的输入.

命名文件使用从列表 0 到 Z

今天我编写一些脚本,发现有点小麻烦,使用定义的模式.

模式是创建的文件序列中的开始位置 0 (零) 和不能重复,直到 Z.

示例:

myfile0.ext, myfile1.ext, myfile2.ext, (...), myfile9.ext, myfileA.ext, myfileB.txt, (...), myfileZ.txt

很好, 这不是一个大麻烦,所以我没有使用此代码.

// Filename
$seq = $last_used_seq = '';
$seqs = array_merge(range('0','9'), range('A', 'Z'));]
$l = 1;
while (!in_array($seq, $seqs)) {
    $seq = chr(ord($last_used_seq) + $l++);
}

$seq

做不了的预期值 0 (零) 第一次运行. 相反, 它是空白.

调试的变量, 看到了, while 从来没有计算结果为 true. 试图复制在命令行上发现

in_array($seq, $seqs);

始终返回 true. 我试着用 “”, “R” 无论什么价值,我用, 仍在返回 true.

所以我更改为使用 STRICT 理由 in_array to true and works for ‘;A’; through ‘;Z’;, but not for ‘;0; through ‘;9;.

while (!in_array($seq, $seqs, true)) {
    $seq = chr(ord($last_used_seq) + $l++);
}

Damn…; PHP 是正确, ;0; 严格来说并不等于 0. 的 Chr 函数返回值 string

范围('' 0, '' 9)

创建 arrayinteger 值.

所以, 我改变了方法来评估所有的值 STRICT, 因为我想要创建一个干净整洁的代码没有其他要使用的函数.

This is the final code that I’;m 使用:

// 最初的值 $seq = ';
$seqs = array_merge(范围(ord('' 0),ord('' 9)), 范围(ord(' A'), ord(' Z')));
$seqs = array_map(chr', $seqs);
$l = 1;
同时 (!in_array($seq, $seqs, 真正的)) {
    $seq = chr(ord($新闻电台['' last_seq]) + $l + +);
}

// 文件名 foreach ($itens_for_files as $key =>; $条 】) {
    // ... 另一种代码,以填充文件 $seq = chr(ord($seq) + 1);
    同时 (!in_array($seq, $seqs, 真正的)) {
    $seq = chr(ord($seq) + 1);
    $文件名 = myfile . $seq . ''.ext;
    // ...
}

你甚至可以看到, 我改变了 $seqs initial values from ‘;0; 到你 ASCII 代码和回到你给了我的价值 array 与中的所有值 string 类型.

见你!

PHP 比较错误

今天, 我在写一个脚本在 PHP 使用在命令行中,当遇到了意外的行为 (至少对我而言).
该脚本应接收三个参数, 其中最后一个包含一个或多个数字代码列表.
尝试验证此最后一个参数得到一个不同的结果,比想象中.
看到我正在使用的代码片段:

// test.php 如果 (php_sapi_name() = = 'cli') {
    $di = 设定($argv[1]) ? $argv[1] : 日期(' Y-m-' d); // 初始日期 $df = 设定($argv[2]) ? $argv[2] : 日期(' Y-m-' d); // 最后日期 $prods = 设定($argv[3]) ? 爆炸(',', $argv[3]) : 数组(); // 代码列表

    ##### 验证
    // 如果,初始日期 ($迪 != 日期(' Y-m-' d, strtotime($迪))) {
        回声 "\n";
        回声 "错误! 初始日期无效!\n";
        退出;
    }
    // 决赛日期如果 ($df != 日期(' Y-m-' d, strtotime($df))) {
        回声 "\n";
        回声 "错误! 无效的最后日期!\n";
        退出;    
    }

    // 如果,代码 (计数($电棒) >; 0) {
        foreach ($作为 $prod 刺) {
            如果 ($产品 != (int)$产品) {
                回声 "\n";
                回声 "错误! 代码 " . $产品 . " 是无效的!\n" ;
                退出;
            }
        }
    }
    回声 "完成!";
}

继续阅读 > >

回调() 在互联网资源管理器中无法正常工作

最近,我使用 javascript 代码的问题 jQuery 和它在不同的浏览器一样工作 , 的 火狐浏览器 和某些版本的 互联网资源管理器, 但是,顽固地拒绝在工作 互联网资源管理器 7 8.
遵循代码:

$.发布(URL,{ 选项 }, 
  功能 (响应) {
     $('' #myElement).HTML(响应);
  },
' 文本 ');

在一些测试后意识到有问题的方法, 在其他代码他表现如预期.
所以它是只是修复 IE 和实现一个小的语法错误在 HTML 中彻底调试代码和 Ajax 方法的答案 7 显示正确答案.
然后按照提示, 如果你有问题的方法 jQuery.html(), 首先检查是否正在写入元素中的内容是没有错误的 html 代码, 因为验证 IE 7/8 会写 HTML 并且不显示错误, 无论多么渺小.