需求:
    条件1:(3-4)个人;
    条件2:在满足条件1的情况下,必须满足(1个成年男人,1个成年女人,1个或两个未满12周岁的孩子);
    否则验证不允许通过。
需求转换:x:男,y:女,i:成年人,j:未成年人 
     则以下情况可通过:
     xi,yi,xj
     xi,yi,yj
     xi,yi,xj,xj
     xi,yi,xj,yj
     xi,yi,yj,yj请各位想想用js如何实现(也可以用jQuery等js框架)。

解决方案 »

  1.   

    这个不是js判断么,需要用到jQuery?
      

  2.   

    可以用正则表达式你将输入的情况拼接成字符串,然后用正则表达式的test函数匹配一下,reg=/xi,yi,((x|y)j,?){1,2}/,如果test返回是1则说明符合情况,否则不匹配。
      

  3.   

    上面的正则少了一个$符号<script type="text/javascript">
    var ss="xi,yi,xj,xj,xj";
    reg=/xi,yi,([xy]j,?){1,2}$/;
    document.write(ss);
    alert(reg.test(ss));
    </script>
      

  4.   

    var ss = "xi,yi,xj,xj,xj";
    function test( input ){
            var arr = input.split(",");
            var person = {};
    person["j"] = 0; //未成年人数
    person["xi"] = 0; //男成年人数
    person["yi"] = 0; //女成年人数
    for (var i = 0 ,j = arr.length; i < j ; i++){
    if(arr[i].indexOf("j")>0){
    //包含未成年人
    person["j"]++;
    continue;
    }
             person[arr[i]]++ ;
    }
    if( person["xi"] == 1 && person["yi"] == 1 && (person["j"]==1 || person["j"]==2)){
                    return true;
             }
    return false;
    }
    alert( test(ss) ) ;
      

  5.   

    var ss = "xi,yi,xj,xj,xj";
    function test( input ){
    var arr = input.split(",");
    var person = {};
    person["j"] = 0; //未成年人数
    person["xi"] = 0; //男成年人数
    person["yi"] = 0; //女成年人数
    for (var i = 0 ,j = arr.length; i < j ; i++){
    if(arr[i].indexOf("j")>0){
    //包含未成年人
    person["j"]++;
    continue;
    }
    person[arr[i]]++ ;
    }
    if( person["xi"] == 1 && person["yi"] == 1 && (person["j"]==1 || person["j"]==2)){return true;}
    return false;
    }
    alert( test(ss) ) ;
      

  6.   


    <script type="text/javascript" src="jquery-1.4.2.min.js"></script>
    <script type="text/javascript" >
    $(function(){
    $("input[type='button']").click(function(){
    var famliyMembers = "";
    //x:男,y:女,i:成年人,j:未成年人 
    $("table tr").each(function(i){
    var tr = $(this);
    if(i>0){
    var age = tr.find("td").eq(0).find("input").val();
    // age = jsGetAge(age);
    var sex = tr.find("td").eq(1).find("select").val();
    if(age >= 18) famliyMembers += ((sex == '男')?"xi":"yi")+",";
    if(age >=12 && age < 18) famliyMembers += "xx,";
      if(age < 12 ) famliyMembers += ((sex == '男')?"xj":"yj")+",";
    }
    });
    //var reg=/(xi,yi,([xy]j,?){1,2})|(yi,xi,([xy]j,?){1,2})|(([xy]j,?){1,2},yi,xi)|(([xy]j,?){1,2},xi,yi)$/;
    // var reg =/(((([x,y]{1}j){1,2}+,)|([x,y]{1}i{1,2}+,)))(((xi,yi,)|(yi,xi,)))|((((xi,yi,)|(yi,xi,))((([x,y]{1}j){1,2}+,)|([x,y]{1}i{1,2}+,))))$/;
        var reg = /^(([xy]{1}i,)|(i[xy]{1},)){2}(([xy]{1}j,)|(j[xy]{1},)){1,2}$/;
    //var reg = /(((xi,yi,)|(yi,xi,))((([x,y]{1}j){1,2}+,)|([x,y]{1}i{1,2}+,)))$/;
    //var reg=/xiyi[xj]{1,2}|xiyi[yj]{1,2}$/;

    famliyMembers = famliyMembers.substring(0,famliyMembers.length-1);
    //alert(famliyMembers);
    $("p").html(famliyMembers);
    if(!reg.test(famliyMembers)){
    alert("家庭计划:必须夫妻二人携带两名以下未满12周岁儿童");return;
    }
    alert("正确"+famliyMembers);
    });
    });
    //JS日期系列:根据出生日期 得到周岁年龄              
    //参数strBirthday已经是正确格式的2007.02.09这样的日期字符串
    //后续再增加相关的如日期判断等JS关于日期处理的相关方法
    function jsGetAge(strBirthday)
    {      
        var returnAge;
        var strBirthdayArr=strBirthday.split("-");
        var birthYear = strBirthdayArr[0];
        var birthMonth = strBirthdayArr[1];
        var birthDay = strBirthdayArr[2];
       
        d = new Date();
        var nowYear = d.getFullYear();
        var nowMonth = d.getMonth() + 1;
        var nowDay = d.getDate();
       
        if(nowYear == birthYear)
        {
            returnAge = 0;//同年 则为0岁
        }
        else
        {
            var ageDiff = nowYear - birthYear ; //年之差
            if(ageDiff > 0)
            {
                if(nowMonth == birthMonth)
                {
                    var dayDiff = nowDay - birthDay;//日之差
                    if(dayDiff < 0)
                    {
                        returnAge = ageDiff - 1;
                    }
                    else
                    {
                        returnAge = ageDiff ;
                    }
                }
                else
                {
                    var monthDiff = nowMonth - birthMonth;//月之差
                    if(monthDiff < 0)
                    {
                        returnAge = ageDiff - 1;
                    }
                    else
                    {
                        returnAge = ageDiff ;
                    }
                }
            }
            else
            {
                returnAge = -1;//返回-1 表示出生日期输入错误 晚于今天
            }
        }
       
        return returnAge;//返回周岁年龄
       
    }
    </script>
    <table>
    <tr>
    <td>年龄</td>
    <td>性别</td>
    </tr>
    <tr>
    <td><input type="text"></td>
    <td><select><option>男</option><option>女</option></select></td>
    </tr>
    <tr>
    <td><input type="text"></td>
    <td><select><option>男</option><option>女</option></select></td>
    </tr>
    <tr>
    <td><input type="text"></td>
    <td><select><option>男</option><option>女</option></select></td>
    </tr>
    <tr>
    <td><input type="text"></td>
    <td><select><option>男</option><option>女</option></select></td>
    </tr>
    </table>
    <p></p>
    <input type=button value="确 定">
      

  7.   

    数据如果是从后台取的,应在后台里操作判断。数据如果是前台输入的,应结合前台的HTML结构来写。你前台到底什么情况都不讲清楚,怎么谈。