【问题标题】:Validate textarea input for alphanumeric value验证文本区域输入的字母数字值
【发布时间】:2015-03-19 14:21:51
【问题描述】:

我想验证作为地址字段的文本区域,它必须包含字母和数字,至少 1 个数字。 例如:“Laksda Adisucipto 街,22A 号。” 但是当我只输入:“Laksda Adisucipto street”(没有数字)时,它会显示警报“您必须输入至少 1 个数字”

我正在使用 Twitter Bootstrap 和 Validator.js 这是我的代码

HTML:

<div class="form-group col-md-12">
                        <label for="address" class="control-label"><span>*</span> <?php echo $this->lang->line('address');?></label>
                        <textarea class="form-control" id="address" rows="5" required name="address" data-error="Address is required"></textarea>
                        <span class="help-block with-errors"></span>
                    </div>

JS:

<script>
$('#address').change(function()  
{  
 var letterNumber = /^[0-9a-zA-Z]+$/;  
if(($('#').value.match(letterNumber))   
{  
 return true;  
}  
else  
{   
 alert("message");   
 return false;   
}  
 }  );

【问题讨论】:

  • 问题是什么?该代码显然是错误的,因为它不允许有任何空格,甚至没有尝试检查至少一位数字(数字)。
  • 即使不输入数字,上述正则表达式也允许。快速而肮脏的修复 - /^.*[a-zA-Z]+.*[0-9]+.*$/

标签: javascript jquery html twitter-bootstrap validation


【解决方案1】:

试试这个

$('#address').blur(function()  
{  
 var letterNumber = /^[0-9a-zA-Z]+$/;  
    if(this.value.match(letterNumber))   
      {  
       return true;  
      }  
    else  
    {   
     alert("message");   
     return false;   
    }  
 });

你可以在这里查看:http://jsfiddle.net/oa6eewck/

【讨论】:

    【解决方案2】:
    $('#address').blur(function()  
    {  
     var letterNumber = /^[0-9a-zA-Z]+$/;  
        if(this.value.match(letterNumber))   
          {  
           return true;  
          }  
        else  
        {   
         alert("message");   
         return false;   
        }  
     });
    

    此功能将只允许字符和数字,这对于输入文本字段很有用,但由于您有文本区域“空格”和“逗号”和“句点”是正确的。

    所以最好遵循以下表达式:

        $('#address').blur(function()  
            {  
            var hasNumber    = this.value.match(/^[a-zA-Z0-9\s .,]+$/);
            if ( hasNumber) {
             return true;
            } else {
             alert("message");   
             return false; 
            }
            });
    

    【讨论】:

    • 您可以在 reg exp 中添加特殊字符以提高效率,或者如果您需要允许更多特殊字符,例如 this.value.match(/^[a-zA-Z0-9\s .,?"-]+$/); 连字符应该是atlast,否则会被当作定义起点和终点的字符
    【解决方案3】:
    $('#address').on('change', function () {
        var hasNumber = this.value.match(/\d/);
        var isAlfa    = this.value.match(/^[0-9a-zA-Z]+$/);
    
        if ( hasNumber && isAlfa ) {
            return true;
        } else {
            alert("message");   
            return false; 
        }
    });
    

    FIDDLE

    【讨论】:

      【解决方案4】:

      adeneo 的解决方案是对的。但我认为 isAlfa 应该具有以下价值

      var isAlfa = this.value.match(/^[A-Za-z\d(-.,) ]+/);

      【讨论】:

        猜你喜欢
        • 2014-12-03
        • 1970-01-01
        • 2013-09-07
        • 1970-01-01
        • 2019-04-04
        • 1970-01-01
        • 1970-01-01
        • 2015-06-19
        • 2021-12-28
        相关资源
        最近更新 更多