Javascript替换为正则表达式无法正常工作

时间:2018-04-12 15:41:15

标签: javascript html regex replace

我正在尝试使用正则表达式验证名称,正则表达式阻止用户连续输入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">

目前我想写一封信,我不知道为什么,我希望你们能帮忙。

编辑:名称只包含字母,而不是数字。

6 个答案:

答案 0 :(得分:2)

使用此解决方案,它仅删除第二个空格或第二个点,并且第一个仍将保留:

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:1)

这个正则表达式不允许它们进入两个句号或两个句号,当它们进入第二个句号时它会清除。

&#13;
&#13;
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;
&#13;
&#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 ?

要仅允许字符,单个空格或单个点,您可以替换所有不符合这些条件的字符:

([. ])(?=\1)|[^a-zA-Z. ]

&#13;
&#13;
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;
&#13;
&#13;

要匹配一个点后跟一个点或一个空格后跟一个空格,您可以捕获一个点中的一个点或一个空格,如果后面跟着组中使用正值捕获的内容,它将匹配lookahead

([. ])(?=\1)

答案 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">