没写过 PHP ,临时需要,有 V 友能帮忙把这 20 行 Javascript 移植到 PHP 吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
edis0n0
V2EX    PHP

没写过 PHP ,临时需要,有 V 友能帮忙把这 20 行 Javascript 移植到 PHP 吗?

  •  
  •   edis0n0 2022 年 10 月 11 日 6535 次点击
    这是一个创建于 1212 天前的主题,其中的信息可能已经有所发展或是发生改变。
    function convert(input = "") { let pdst = input.toUpperCase().trim(); let pit = []; let isg = ""; while (/[0-9A-]+/.exec(pdst) !== null) { let data = /[0-9A-Z]+/.exec(pdst); if (data !== null) { let pd = data[0]; let pdt = pd.length; if (/[0-9]+/.test(pd) && pd.length < 8) isg += pd; if (isg.length == 15) pd = isg; if (isg.length >= 15) isg = ""; if (/[0-9]+/.test(pd) && pd.length == 11 && pd.substring(0, 1).toLowerCase() == "s") pit.push(pd.trim().substring(1, 11)); if (/[0-9]+/.test(pd) && pd.length == 13 && pd.substring(0, 1).toLowerCase() == "s") pit.push(pd.trim().substring(1, 13)); if ((/[0-9]+/.test(pd) && pd.length == 15) || pd.length == 12 || pd.length == 10 || (/[0-9]+/.test(pd) && pd.length == 8)) pit.push(pd); pdst = pdst.substring(pdt).trim(); } } return Array.from(new Set(pit)); } 
    32 条回复    2022-10-12 17:16:29 +08:00
    phpfpm
        1
    phpfpm  
       2022 年 10 月 11 日 via Android
    直接 node 跑
    edis0n0
        2
    edis0n0  
    OP
       2022 年 10 月 11 日
    @phpfpm #1 有并发要求
    flyqie
        3
    flyqie  
       2022 年 10 月 11 日 via Android
    给个示例输入?
    snoopyhai
        4
    snoopyhai  
       2022 年 10 月 11 日
    语法没有差太多,边查手册边翻译吧
    ywmail
        5
    ywmail  
       2022 年 10 月 11 日   2
    github copilot 转换的:
    ```
    function convert($input = "") {
    $pdst = strtoupper(trim($input));
    $pit = [];
    $isg = "";
    while (preg_match_all("/[0-9A-Z]+/", $pdst) !== null) {
    $data = preg_match_all("/[0-9A-Z]+/", $pdst);
    if ($data !== null) {
    $pd = $data[0];
    $pdt = strlen($pd);
    if (preg_match_all("/[0-9]+/", $pd) && strlen($pd) < 8) $isg .= $pd;
    if (strlen($isg) == 15) $pd = $isg;
    if (strlen($isg) >= 15) $isg = "";
    if (preg_match_all("/[0-9]+/", $pd) && strlen($pd) == 11 && strtolower(substr($pd, 0, 1)) == "s") array_push($pit, substr($pd, 1, 10));
    if (preg_match_all("/[0-9]+/", $pd) && strlen($pd) == 13 && strtolower(substr($pd, 0, 1)) == "s") array_push($pit, substr($pd, 1, 12));
    if ((preg_match_all("/[0-9]+/", $pd) && strlen($pd) == 15) || strlen($pd) == 12 || strlen($pd) == 10 || (preg_match_all("/[0-9]+/", $pd) && strlen($pd) == 8)) array_push($pit, $pd);
    $pdst = substr($pdst, $pdt);
    }
    }
    return array_unique($pit);
    }
    ```
    musi
        6
    musi  
       2022 年 10 月 11 日
    不懂就问,这段代码的 node 并发干不过 php ?
    marunrun
        7
    marunrun  
       2022 年 10 月 11 日
    @ywmail 学到了,原来 github copilot 还能这样玩, 牛哇!
    kamal
        8
    kamal  
       2022 年 10 月 11 日
    @ywmail #5 好奇这是用什么命令做到的?
    iddddg
        9
    iddddg  
       2022 年 10 月 11 日
    @ywmail 同样好奇怎么转的,难道把 js 放在注释里?
    helone
        11
    helone  
       2022 年 10 月 11 日
    @musi PHP 大部分情况下效率其实还不错,因为底层基本都是 C 写的
    musi
        12
    musi  
       2022 年 10 月 11 日
    @helone #11 node 底层也是 c++,感觉从这里比较不出来什么吧
    landers2015
        13
    landers2015  
       2022 年 10 月 11 日
    @ywmail 你交了$了?还是有科学方式?求分享
    zoharSoul
        14
    zoharSoul  
       2022 年 10 月 11 日
    @learningman #10
    怎么转的?
    wvD98ys9PyO2xEdV
        15
    wvD98ys9PyO2xEdV  
       2022 年 10 月 11 日
    @landers2015 可以上万能的 tb 不到 99rmb/年
    wvD98ys9PyO2xEdV
        16
    wvD98ys9PyO2xEdV  
       2022 年 10 月 11 日
    @landers2015 GitHub 有学生包 里面有 github copilot 还有其他的
    liuxu
        17
    liuxu  
       2022 年 10 月 11 日
    两个半斤八两吧,是不是 js 的正则引擎跟不上,预编译缓存一下
    helone
        18
    helone  
       2022 年 10 月 11 日
    @musi node 中间还有一个 v8 引擎,php 的大部分代码其实是以 c 的形式在跑的,典型的场景就是图片验证码的生成,php 写出来的生成速度比 Go 还要快几倍
    lysS
        19
    lysS  
       2022 年 10 月 11 日
    @helone #18 这种得是官方的函数或者用插件吧、其实就是调存在的 abi 接口,自己写的代码逻辑是做不到的
    xxiu
        20
    xxiu  
       2022 年 10 月 11 日
    https://models.aminer.cn/codegeex/zh-CN/codeTranslator

    function convert($input) {
    $pdst = strtoupper($input);
    $pit = array();
    $isg = "";
    while (preg_match("/[0-9A-Z]+/", $pdst, $matches)) {
    $data = $matches;
    if ($data) {
    $pdt = strlen($data[0]);
    if (strpos($data[0], "1") === 0 && strpos($data[0], "2") === strlen($data[0]) - 1) $isg = $data[0];
    if (strpos($data[0], "1")!== 0 && strpos($data[0], "2")!== strlen($data[0]) - 1) $isg = "";
    if (strpos($data[0], "1") === 0 && strpos($data[0], "2")!== strlen($data[0]) - 1) $isg = "";
    if ($isg!== "") $pdst = substr($pdst, 0, strpos($pdst, $isg) - 1). $isg.substr($pdst, strlen($isg));
    if (strpos($data[0], "1")!== 0 && strpos($data[0], "2") === strlen($data[0]) - 1) $pit[] = substr($pdst, 0, strpos($pdst, $data[0]) - 1).substr($pdst, strlen($data[0]));
    if (strpos($data[0], "1") === 0 && strpos($data[0], "2")!== strlen($data[0]) - 1) $pit[] = substr($pdst, 0, strpos($pdst, $data[0]) - 1);
    if (strpos($data[0], "1")!== 0 && strpos($data[0], "2")!== strlen($data[0]) - 1) $pit[] = substr($pdst, 0, strpos($pdst, $data[0]) - 1).substr($pdst, strlen($data[0])).substr($pdst, strpos($pdst, $data[0]) + strlen($data[0]) - strlen($pdst));
    if (strpos($data[0], "1")!== 0 && strpos($data[0], "2") === strlen($data[0]) - 1) $pit[] = substr($pdst, 0, strpos($pdst, $data[0]) - 1).substr($pdst, strlen($data[0])).substr($pdst, strpos($pdst, $data[0]) + strlen($data[0]) - strlen($pdst));
    $pdst = substr($pdst, $pdt);
    }
    }
    return $pit;
    }
    ForkGagHub
        21
    ForkGagHub  
       2022 年 10 月 11 日
    虽然我不会拍黄片,但是帮你找到了一个网站
    https://wtools.io/Javascript-to-php-converter

    <?php
    $var = 'function convert(input = "") {
    let pdst = input.toUpperCase().trim();
    let pit = [];
    let isg = "";
    while (/[0-9A-Z]+/.exec(pdst) !== null) {
    let data = /[0-9A-Z]+/.exec(pdst);
    if (data !== null) {
    let pd = data[0];
    let pdt = pd.length;
    if (/[0-9]+/.test(pd) && pd.length < 8) isg += pd;
    if (isg.length == 15) pd = isg;
    if (isg.length >= 15) isg = "";
    if (/[0-9]+/.test(pd) && pd.length == 11 && pd.substring(0, 1).toLowerCase() == "s") pit.push(pd.trim().substring(1, 11));
    if (/[0-9]+/.test(pd) && pd.length == 13 && pd.substring(0, 1).toLowerCase() == "s") pit.push(pd.trim().substring(1, 13));
    if ((/[0-9]+/.test(pd) && pd.length == 15) || pd.length == 12 || pd.length == 10 || (/[0-9]+/.test(pd) && pd.length == 8)) pit.push(pd);
    pdst = pdst.substring(pdt).trim();
    }
    }
    return Array.from(new Set(pit));
    }
    l9rw
        22
    l9rw  
       2022 年 10 月 11 日
    楼上工具转出来的代码第五行的判断都是错的
    edis0n0
        23
    edis0n0  
    OP
       2022 年 10 月 11 日
    @l9rw #22 对,楼上转出来的没有一个能工作,在翻文档找问题
    Austaras
        24
    Austaras  
       2022 年 10 月 11 日
    你真要并发的话不如在 node 里面开个 worker ,反正都是原生数据类型
    Light3
        25
    Light3  
       2022 年 10 月 11 日
    会写 php 但是 js 会的不多
    没看懂楼主接了个字符串 为什么要循环字符串..

    给楼主指一下 如何快速写出来
    字符串 用 str_split() 分成数组
    然后 foreach($list as $k=>$v){

    } 循环

    在循环里面 $k+1 就是字符串的第几位 然后判断
    php 字符串 拼接值 +. 就可以
    数组 直接[] 赋值就可以

    php 正则函数 preg_match() 如果纯判断数字 is_numeric() 也可以


    自己试试吧
    zjsxwc
        26
    zjsxwc  
       2022 年 10 月 11 日
    直接用这个 php 写的 js 解释器,在 php 里面运行 js
    https://github.com/hiltonjanfield/js4php5
    wuxiaoqing234
        27
    wuxiaoqing234  
       2022 年 10 月 11 日
    @zjsxwc 你搞这个还得看入参和出参, 还不如直接看语法..
    ywmail
        28
    ywmail  
       2022 年 10 月 12 日
    @Marinaaaa @iddddg @kamal
    copilot 还有另一个 vs code 插件:github copilot labs ,用它转的。

    @landers2015
    折腾了一圈替代品,发现和 copilot 差距太大,最后交了$买的。
    Chaningnt
        29
    Chaningnt  
       2022 年 10 月 12 日   1
    测试了两三条数据
    function convert($input){
    $pdst = trim(strtoupper($input));
    $isg = '';
    $pit = [];
    while (preg_match('/[0-9A-Z]+/', $pdst, $data) != false){
    if(count($data) > 0){
    $pd = $data[0];
    $pdt = strlen($pd);
    if(preg_match('/[0-9]+/', $pd) && strlen($pd) < 8 ){
    $isg .= $pd;
    }
    if(strlen($isg) == 15){
    $pd = $isg;
    }
    if(strlen($isg) >= 15){
    $isg = '';
    }
    if(preg_match('/[0-9]+/', $pd) && strlen($pd) == 11 && substr($pd, 0, 1) == 's'){
    $pit[] = substr(trim($pd), 1, 11);
    }
    if(preg_match('/[0-9]+/', $pd) && strlen($pd) == 13 && substr($pd, 0, 1) == 's'){
    $pit[] = substr(trim($pd), 1, 13);
    }
    if((preg_match('/[0-9]+/', $pd) && strlen($pd) == 15) || strlen($pd) == 12 || strlen($pd) == 10 || (preg_match('/[0-9]+/', $pd) && strlen($pd) == 8)){
    $pit[] = $pd;
    }
    $pdst = trim(substr($pdst, $pdt));
    }
    }
    return $pit;
    }
    Chaningnt
        30
    Chaningnt  
       2022 年 10 月 12 日   1
    @Chaningnt 返回结果应该是要去重,改成 return array_unique($pit);
    Chaningnt
        31
    Chaningnt  
       2022 年 10 月 12 日   1
    按 js 的格式处理了一下

    function convert($input){
    $pdst = trim(strtoupper($input));
    $isg = '';
    $pit = [];
    while (preg_match('/[0-9A-Z]+/', $pdst, $data) != false){
    if(count($data) > 0){
    $pd = $data[0];
    $pdt = strlen($pd);
    if(preg_match('/[0-9]+/', $pd) && strlen($pd) < 8 ) $isg .= $pd;
    if(strlen($isg) == 15) $pd = $isg;
    if(strlen($isg) >= 15) $isg = '';
    if(preg_match('/[0-9]+/', $pd) && strlen($pd) == 11 && substr($pd, 0, 1) == 's') $pit[] = substr(trim($pd), 1, 11);
    if(preg_match('/[0-9]+/', $pd) && strlen($pd) == 13 && substr($pd, 0, 1) == 's') $pit[] = substr(trim($pd), 1, 13);
    if((preg_match('/[0-9]+/', $pd) && strlen($pd) == 15) || strlen($pd) == 12 || strlen($pd) == 10 || (preg_match('/[0-9]+/', $pd) && strlen($pd) == 8)) $pit[] = $pd;
    $pdst = trim(substr($pdst, $pdt));
    }
    }
    return array_unique($pit);
    }
    edis0n0
        32
    edis0n0  
    OP
       2022 年 10 月 12 日
    @Chaningnt #31 谢谢!晚上测试一下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3930 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 01:11 PVG 09:11 LAX 17:11 JFK 20:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86