`
yl.fighter
  • 浏览: 257285 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

看到PHP的一道面试题, 做了下, 不知道还有没好点方法

    博客分类:
  • Web
阅读更多
题目如下,
类似这样的aaa<em>sss</em>ddd字符串,写个函数CutStr($str,$max)实现截取:
1)如果$max大于$str的长度则返回$str
2)<em>和</em>不包含在长度计算范围。
例:
如果CutStr("aaa<em>sss</em>ddd",6) 则返回aaa<em>sss</em>.
如果CutStr("aaa<em>sss</em>ddd",4) 则返回aaas,不包含<em>标签

我的第一反应就是正则, 然后就...
var str = "aaa<em>sss</em>ddd";

function cutStr(str, max) {
    // 首先把<em>和</em>先给剔除, 然后记录他们的位置
    var reg = new RegExp("(.*?)<em>(.*?)</em>(.*?)"); 
    var emSub = str.indexOf("<em>");
    var em2Sub = str.indexOf("</em>");
    var newstr = str.replace(reg, "$1$2$3");

    // 如果不是数字或是负数, 或者大于字符长度, 直接返回原字符
    if (!/^\d+$/.test(max) || max >= newstr.length) return str; 

    newstr = newstr.substring(0, max);
    if (max <= emSub) { //小于三
        return newstr;
    } else if (max <= em2Sub - 4 && max > emSub) { // 大于三, 小于六时(注: -4 是为了减去第一个<em>占去的位置)
        var tempReg = new RegExp("(\\w{" + emSub + "})(\\w*?)");
        return newstr.replace(tempReg, "$1<em>$2");
    } else { // 大于六
        var tempReg = new RegExp("(\\w{" + emSub + "})(\\w{" + (em2Sub - emSub - 4) + "}?)(\\w*?)");
        return newstr.replace(tempReg, "$1<em>$2</em>$3");
    }
}

alert(cutStr(str, 7));​


觉得这个方法好笨, 有什么别的好点的方法吗?

想到了,, 原来这个这么简单,, 我把它想复杂了...

var str = "aaa<em>sss</em>ddd";  
  
function cutStr(str, max) {  
    var emSub = str.indexOf("<em>");  
    var em2Sub = str.indexOf("</em>");  
    // 如果不是数字或是负数, 或者大于字符长度, 直接返回原字符  
    if (!/^\d+$/.test(max) || max >= str.length - 9) return str; 
    else if(max > em2Sub-4) return str.substring(0, max + 9);
    else if(max > emSub) return str.substring(0, max + 4);
    else return str.substring(0, max);
}  
  
alert(cutStr(str, 7));  ​
分享到:
评论
1 楼 mengjie133233 2014-04-29  
貌似那个js版本的不对啊

相关推荐

    笔试面试题 一道面试题关于信息系统的问答和注意事项

    笔试面试题 一道面试题关于信息系统的问答和注意事项 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的...

    一道关于php变量引用的面试题

    这道面试题涉及到了PHP变量引用的基本原理以及预增量操作符(++)的使用。让我们详细探讨一下这个问题。 首先,看给定的PHP代码: ```php $a = 1; $x =&$a; $b=$a++; ``` 在这段代码中,我们创建了一个变量 `$a` ...

    PHP工程师面试笔试真题(某知名问答平台)-附解析.doc

    4. stream_get_meta_data函数的使用:该函数可以获取流的相关元数据,包括是否还有未读数据、流是否过期、流是否被阻挡以及传输的数据量等,但不能获取流的构建成分。答案是E。 5. PHP脚本写入文件内容:这段代码...

    PHP工程师面试笔试真题(某知名网络设备提供商)-附解析.doc

    23. 这是一道数学题,通过逆向推理可以得出共有31个苹果。每个人拿走1/5后,剩下的苹果数都能被5整除,最后剩下1个苹果,说明初始苹果数减去1后是5的倍数,同时每个人拿走4个苹果后剩下1个,所以初始苹果数减去4的...

    PHP笔试题(附答案).doc

    下面将详细解析每一道题目涉及的知识点: 1. **基础题** - **比较运算符**:在PHP中,`==` 是宽松比较,它会忽略类型,只比较值。因此,`null == false` 和 `'' == 0` 都是相等的。而 `===` 是严格比较,既比较值...

    一道求$b相对于$a的相对路径的php代码

    php面试题的题目: $a = ‘/a/b/c/d/e.php’; $b = ‘/a/b/12/34/c.php’; //计算出 $b 相对于 $a 的相对路径应该是 ../../c/d php面试题的答案: 复制代码 代码如下: function getRelative($a,$b) { $arr = explode...

    PHP读取目录树的实现方法分析

    前一阵时间面试XX公司笔试题中竟然有这样一道题: 使用PHP列出目录树! 当时一看就懵逼了!基本的思路还是有的,不过是使用递归算法,但对PHP操作目录文件的方法却不是很了解,所以今天好好补习一下! 解题思路: 1....

    PHP合并数组的2种方法小结

    但最近我在换工作的时候遇到一道合并数组的面试题,我当时想的是将两个数组先转化为字符串,合并后再转化为数组输出,面试官说这个思路不太对,完了bulabula讲了一下数组基础的东西,然后确实是因为经验问题,或者是...

    php-leetcode题解之分发饼干.zip

    LeetCode是一个在线平台,提供了大量的编程练习题,旨在帮助程序员提升算法技能和准备面试。在这个题解中,我们将深入探讨如何用PHP来解决这个问题。 “分发饼干”这道题目通常是面试中用来考察程序员解决贪心算法...

    PHP依赖注入原理与用法分析

    依然是来自到喜啦的一道面试题,你知道什么是依赖注入吗? 依赖注入(DI)的概念虽然听起来很深奥,但是如果你用过一些新兴的php框架的话,对于DI一定不陌生,因为它们多多少少都用到了依赖注入来处理类与类之间的...

    PHP实现的多维数组排序算法分析

    突然想起了一道面试题,把一个多维数组排序。 例: &lt;?php //有一个多维数组 $a = array( array('key1'=&gt;940, 'key2'=&gt;'blah'), array('key1'=&gt;23, 'key2'=&gt;'this'), array('key1'=&gt;894, 'key2'=&gt;'that') ); ...

    php-leetcode题解之搜索二维矩阵.zip

    LeetCode是一个在线平台,提供了大量编程题目来帮助开发者提升技能,而“搜索二维矩阵”是其中的一道算法题。这个压缩包很可能是某位开发者分享的解决方案,旨在帮助其他学习者理解和解决此类问题。 在PHP中,处理...

    10条PHP编程习惯助你找工作

    在面试之间,我和其主要的程序员们在咨询电话中聊了聊,最后他们给我出了一套测试题,其中有一道很耐人寻味。  找出以下代码的错误之处:&lt;?function baz($y $z) { $x = new Array(); $x[sales] = 60; $x[profit]...

Global site tag (gtag.js) - Google Analytics