正则表达式无法正常工作 - 字符串必须包含数字和由空格分隔的字符串

时间:2017-03-16 21:33:35

标签: javascript jquery regex

我在使用正则表达式时遇到了一些麻烦。 当第三个字段填充数字和字符串用空格分隔时,我需要启用第四个字段,但出于某种原因我无法使其工作。

这是模式:\d+ *?.*? .*
这是fiddle



function validateStreetNumber(variable){
    var reg=new RegExp('/\d+ *?.*? .*');
    console.log(reg);
    var compare=reg.test(variable);
    return compare;
}

$(document).ready(function(){
    $('#state').prop('disabled',true);
    $('#address').prop('disabled',true);
    $('#number').prop('disabled',true);

    $('#city').on("input",function(){
        var value=$(this).val();

        if(value==''){
          $('#state').prop('disabled',true);
          $('#address').prop('disabled',true);
          $('#number').prop('disabled',true);
        }

        else{
          $('#state').prop('disabled',false);
        }
    });
    $('#state').on("change",function(){
        var value=$(this).val();

        if(value=='select'){
          $('#address').prop('disabled',true);
          $('#number').prop('disabled',true);
        }

        else{
          $('#address').prop('disabled',false);
        }
    });
    $('#address').on("input",function(){
        var value=$(this).val();
        var exp=validateStreetNumber(value);

        if(!exp){
          $('#number').prop('disabled',true);
        }

        else if(exp){
          $('#number').prop('disabled',false);
        }
	});
});

input, select{
  width: 200px;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="#" id="test" name="test">
    <input type="text" id="city" name="city" maxlength="100" /><br>
    <select id="state" name="state">
      <option value="select">Select</option>
      <option value="aragua">Aragua</option>
      <option value="carabobo">Carabobo</option>
      <option value="miranda">Miranda</option>
      <option value="zulia">Zulia</option>
      <option value="bolivar">Bolívar</option>
    </select><br>
    <input type="text" id="address" name="address" maxlength="100"/><br>
    <input type="text" id="number" name="number" maxlength="8"/><br>
</form>
&#13;
&#13;
&#13;

(对不起我的英文)

2 个答案:

答案 0 :(得分:0)

更改

var reg=new RegExp('/\d+ *?.*? .*');

var reg=new RegExp('\d+ *?.*? .*');

使用RegEx对象构造函数时无需使用/。

此外,如果您只想要一个以空格分隔的数字,后跟任意字符(包括空格)的字符串,您应该只使用: \ d +。*

答案 1 :(得分:0)

您的正则表达式 - new RegExp('/\d+ *?.*? .*') - 评估为/\/d+ *?.*? .*/正则表达式:/,后跟一个或多个d个字母,空格零或多次,任何字符零或更多次,空格和任何0+字符。问题是你在开始时有/和一个不正确的转义d(在构造函数表示法中需要2个反斜杠)。

您需要使用以下正则表达式:

var reg=/^\d+\s/;

它检查字符串是否以1+位开头,后面是空格。

添加.*.*?没有意义,因为您只对字符串开头的内容感兴趣。

<强>详情:

  • ^ - 字符串开始
  • \d+ - 一位或多位
  • \s - 一个空白。