'attr = value'样式输入的正则表达式

时间:2015-09-08 21:06:38

标签: javascript regex

所以我必须得到attr=value格式的输入值。 类似于name=Johnsurname=Doe的内容。该字符串可以包含数字,但不允许使用=之外的其他符号。 现在,我需要在Javascript中验证该字段。我已经有了一个正则表达式,就像这样/[a-zA-Z0-9]+[=]+[a-zA-Z0-9]+/。它的工作正常。但是,我觉得可能有一个更好的正则表达式来做到这一点。此外,如果用户输入类似name=John-的内容,则允许它。不应该是这种情况。如果你们能指出我正确的方向,那就太好了。

var regexField = $('#regex-test'),
    RegEx = /[a-zA-Z0-9]+[=]+[a-zA-Z0-9]+/,
    isValid = function(element){
      return RegEx.test(element.val());
    };
$('#submit').click(function(e){
  if(isValid(regexField)){
    $('#err').hide();
    return;
  }
  $('#err').show();
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div id="err" style="display:none">
    Please enter proper value!
</div>
<input type="text" id="regex-test" required/>
<button id="submit">Submit</button>

2 个答案:

答案 0 :(得分:3)

你的表情离你想要的不远。它允许name=John-的原因是因为没有锚定到字符串的末尾。例如,它也会接受#$%name=John-!?foo。要锚定到开头,请使用^$作为结束。

您不需要将=放在角色类中(因为您只有一个选项);并且您绝对不希望使用+来量化它,因为您只需要一个(不是一个或多个)。

最后,您可以使用i标志使其不区分大小写,从而简化它。

最终,这会给你:

/^[a-z0-9]+=[a-z0-9]+$/i

如果您在属性和值中允许下划线,则可以使甚至更简单:然后您可以将[a-z0-9]更改为\w ...但这是您的通话:)

答案 1 :(得分:0)

允许=周围空格的版本,并且在name=value部分之后仅允许 空格(因此不允许结尾处的符号),将是:

RegEx = /\s*[a-z0-9]+\s*=\s*[a-z0-9]+\s*$/i

&#13;
&#13;
var regexField = $('#regex-test'),
    RegEx = /\s*[a-z0-9]+\s*=\s*[a-z0-9]+\s*$/i,
    isValid = function(element){
      return RegEx.test(element.val());
    };
$('#submit').click(function(e){
  if(isValid(regexField)){
    $('#err').hide();
    return;
  }
  $('#err').show();
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div id="err" style="display:none">
    Please enter proper value!
</div>
<input type="text" id="regex-test" required/>
<button id="submit">Submit</button>
&#13;
&#13;
&#13;