我正在尝试使用正则表达式验证名称,正则表达式阻止用户连续输入2个空格或点。
这是我的代码:
function test(input) {
var regex = /^[A-Za-z]+\.{0,1}\s{0,1}$/;
input.value = input.value.replace(regex, "");
}
<input id="txt_NomCandidato" onkeyup="test(this);" type="text" class="form-control" name="txt_Nom">
目前我想写一封信,我不知道为什么,我希望你们能帮忙。
编辑:名称只包含字母,而不是数字。
答案 0 :(得分:2)
使用此解决方案,它仅删除第二个空格或第二个点,并且第一个仍将保留:
function test(input){
var regex=/\.(?=\.)|\s(?=\s)/;
input.value = input.value.replace(regex, "");
}
&#13;
<input id="txt_NomCandidato" onkeyup="test(this);" type="text" class="form-control" name="txt_Nom">
&#13;
答案 1 :(得分:1)
这个正则表达式不允许它们进入两个句号或两个句号,当它们进入第二个句号时它会清除。
function test(input){
var regex=/\.{2}| {2}/;
input.value = input.value.replace(regex, "").replace(/\d+|/g, '').replace(/\s+/g, ' ').replace(/[^\w]/, '');
}
&#13;
<input id="txt_NomCandidato" onkeyup="test(this);" type="text" class="form-control" name="txt_Nom">
&#13;
答案 2 :(得分:1)
你的正则表达式似乎是正确的(它匹配任何不超过1个空格或1个点的字符串),但你的函数中的逻辑似乎是错误的。
它在做什么:每当值发生变化时,取值并用空字符串替换与该正则表达式匹配的任何内容,因此每当你编写一个字符时,它就被替换(因为它匹配正则表达式)。
我会选择其中一个选项:
a)如果值与正则表达式
不匹配,则显示一条消息b)将正则表达式更改为/。{2} | {2} /并且只替换两个点或两个空格,正如Scath在另一个答案中所说的那样
c)也许只使用原始正则表达式的输入模式属性就足够了:https://www.w3schools.com/TAGS/att_input_pattern.asp
希望这有帮助!
答案 3 :(得分:1)
这是因为你匹配的[A-Za-z]+
匹配一个或多个字符,之后的所有内容都是可选的。
你的正则表达式会匹配。
[A-Za-z]+
匹配一个或多个字符\.{0,1}
匹配可选点(0或1次)\s{0,1}
匹配可选的空白字符(0或1次)哪个匹配a
,然后您将进行替换。
要制作可选内容,您还可以使用question mark ?
要仅允许字符,单个空格或单个点,您可以替换所有不符合这些条件的字符:
function test(input) {
var regex = /([. ])(?=\1)|[^a-zA-Z. ]/;
input.value = input.value.replace(regex, "");
}
&#13;
<form id="" name="">
<input id="txt_NomCandidato" onkeyup="test(this);" type="text" class="form-control" name="txt_Nom">
</form>
&#13;
要匹配一个点后跟一个点或一个空格后跟一个空格,您可以捕获一个点中的一个点或一个空格,如果后面跟着组中使用正值捕获的内容,它将匹配lookahead
答案 4 :(得分:1)
要达到预期效果,请使用下面的切片选项
input.value.slice(-2)将返回最后两个输入的字符,如果是“..”或“”(双空格)则将其替换为''
function test(input){
if(input.value.slice(-2)=='..' || input.value.slice(-2)==' '){
input.value = input.value.replace(input.value.slice(-2), "");
}
}
<input id="txt_NomCandidato" onkeyup="test(this);" type="text" class="form-control" name="txt_Nom">
代码示例 - https://codepen.io/nagasai/pen/VXNOej
由于表达式 ^ [A-Za-z]
,您的正则表达式会清除以[A-Z]或[a-z]开头的所有字符答案 5 :(得分:1)
以下正则表达式适用于您:/[^a-zA-Z. ]|\.(?=\.)|\s(?=\s)/g
[^a-zA-Z. ]+
将所有允许的字符限制为a-z,A-Z,点或空格\.(?=\.)
限制它只允许连续一个点\s(?=\s)
将其限制为一行中只有一个空格每个都用|分隔(或条件)
function test(input) {
var regex = /[^a-zA-Z. ]|\.(?=\.)|\s(?=\s)/g;
input.value = input.value.replace(regex, "");
}
<input id="txt_NomCandidato" onkeyup="test(this);" type="text" class="form-control" name="txt_Nom">