如何验证 jquery 对象中的每个值

Posted

技术标签:

【中文标题】如何验证 jquery 对象中的每个值【英文标题】:How to validate each value inside a jquery object 【发布时间】:2014-05-04 20:34:16 【问题描述】:

我有以下功能:

jQuery 代码:

function validarEnviarPatrocinio()

        var fila = $("#fila").val();

        for(var e=1; e<6; e++)
            $("#email_contactopatrocinador"+e).val($("#email_contactopatrocinador"+e+fila).val());
            var email = $("#email_contactopatrocinador"+e+fila);                
                   
 

PHP/HTML 代码

<?php foreach ($this->items as $i => $item): ?>

<?php for($e=1; $e<6; $e++) ?>
    <label for="email_contactopatrocinador<?php echo $e.$i; ?>">
        <?php echo JText::_('COM_CSTUDOMUS_GANA_PATROCINADOR_EMAIL');?>
    </label>

<input name="email_contactopatrocinador<?php echo $e.$i; ?>" id="email_contactopatrocinador<?php echo $e.$i; ?>" placeholder="<?php echo JText::_('COM_CSTUDOMUS_EJEMPLO_EMAIL');?>" type="email" />
<?php  ?>

<button id="enviarForm2" onclick="document.getElementById('cb<?php echo $i; ?>').checked = true; document.getElementById('seleccionado').value = <?php echo $item->id_inmueble; ?>;  document.getElementById('fila').value = <?php echo $i; ?>; if(!validarEnviarPatrocinio()) return false; Joomla.submitbutton('saloninmobiliarios.ganapatrocinador');" class="uk-button uk-float-right"><?php echo JText::_('COM_CSTUDOMUS_PATROCINADOR_SEND_RECOM'); ?></button>

<?php endforeach; ?>

<input type="hidden" name="fila" id="fila" value=""/>

此函数循环遍历“电子邮件”类型的 5 个输入字段。我想对每个输入进行验证,确保它们在其中插入电子邮件格式。他们填写或留空哪个字段无关紧要。

【问题讨论】:

Validate email address in javascript?的可能重复 @undefined 这不是重复的,我在问“”,所以之后我可以验证每个字段,但我首先需要知道如何管理 jquery 对象. 几乎不可能检查电子邮件地址是否有效,除非向该地址发送电子邮件。对于电子邮件的构成,您是否有一些特定的规则? ”,这意味着什么?你的问题很模糊,你问题的关键是验证电子邮件地址。您在选择目标元素时遇到问题吗? fila 是什么? @undefined 我在选择目标元素时遇到问题.. 对不起我的英语:( 【参考方案1】:

你让它变得复杂了。不需要使用 ID 来选择目标元素,当您有多个共享相同角色的元素时,应该使用类来代替。您可以使用 jQuery each 方法向元素添加类并遍历选定的元素:

$('.email_fields').each(function() 
    var email = this.value;
    // validate the element's value
);

如果需要为元素添加唯一标识符,您可以继续向元素添加id 属性或特定data 属性,如data-id="..." 并获取data 属性的值,你可以使用 jQuery data 方法。

// within the `each` callback context
var id = $(this).data('id');

【讨论】:

【参考方案2】:

您可以使用jquery validator 并插入一个正则表达式进行验证。 验证器将选择器作为输入,并使用您定义的规则集对其进行验证,如下所示:

$('form').validate(
      rules: 
            field1: pattern: /^[A-Z]2[0-9]5$/ // As RegExp
      
);

*您的案例的相关正则表达式是: /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]2,4 )+$/

在任何情况下,您也可以在 js 中创建正则表达式并按照here 所述运行测试函数:

【讨论】:

validate 插件有email 验证器,不需要指定模式,field1: email: true 非常正确。我把它写下来以防他想要比普通电子邮件更通用/复杂的验证【参考方案3】:
    function validarEnviarPatrocinio()

            var fila = $("#fila").val();

            for(var e=1; e<6; e++)
                $("#email_contactopatrocinador"+e).val($("#email_contactopatrocinador"+e+fila).val());
                var email = $("#email_contactopatrocinador"+e+fila); 
                if ($.trim(email ).length == 0) 
                alert('Please enter valid email address in '+i+'th Field ');

            
            if (validateEmail(email)) 
                alert('Email'+i+' is valid');
            
            else 
                alert('Invalid Email'+i+' Address');               
                       
     
function validateEmail(sEmail) 
    var filter = /^([\w-\.]+)@((\[[0-9]1,3\.[0-9]1,3\.[0-9]1,3\.)|(([\w-]+\.)+))([a-zA-Z]2,4|[0-9]1,3)(\]?)$/;
    if (filter.test(sEmail)) 
        return true;
    
    else 
        return false;
    

【讨论】:

您正在修剪 jQuery 对象而不是字符串。

以上是关于如何验证 jquery 对象中的每个值的主要内容,如果未能解决你的问题,请参考以下文章

JQuery如何判断值中是不是包含某个值?

如何比较字典值中的多个数组,并将每个数组元素的字典键映射到新数组/列表中

如何使用选择查询为每个唯一的第二个值获取一个值中的最小值?

验证 package.json 依赖值中的 semver 版本

如何在JSON.NET中读取json对象值中的long值数组

如何将逗号添加到数据框中的现有值中?熊猫