所以我必须得到attr=value
格式的输入值。
类似于name=John
或surname=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>
答案 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
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;