2016-05-16 46 views
1

我只希望我的输入只接受字母和空格,因为我的输入服务于名称,这不起作用我已经尝试在正则表达式中放置一些空间。 我的正则表达式正在工作,但空间不是。Javascript正则表达式 - 不接受空间,但它应该

// without space 
$('#name').on('input', function (e) { 
    this.value = this.value.replace(/[^a-zA-Z.,ñÑ ]/g, ''); 
}); 

// with space but it didnt work 
$('#name').on('input', function (e) { 
    this.value = this.value.replace(/[^a-zA-Z .,ñÑ]/g, ''); 
}); 

// with space again but it fails work also 
$('#name').on('input', function (e) { 
    this.value = this.value.replace(/[^a-zA-Z. ,ñÑ]/g, ''); 
}); 
+0

空格是一个非单词字符,所以使用\ W例如 – moped

+0

给我们一个字符串的例子,你想匹配你的正则表达式,你可以看到,有几个正确的答案,来自未知原因不适用于你 – moped

+0

多数民众赞成的事情,theres很多正确的答案,我不知道什么是问题了,为什么它没有为我工作这就是为什么我来到这里。我只需要我的输入即可接受字母和空格,包括ñÑ。 –

回答

1

使用\s为一个空格。此外\s+匹配多个空格

+0

空格不是正则表达式中的特殊字符,因此它不需要被转义。 –

+0

我只是将我的验证2次放入不同的js中,旧的和其他原因无法正常工作的原因。我很感谢,谢谢先生。 –

+0

'\ s'不等于“单个空间”;它意味着“单个空白”。这意味着换行符,制表符和垂直制表符也会匹配。 –

1

$('#name').keyup(function() { 
 
    var new_value = this.value.replace(/[^a-zA-Z.\s,ñÑ]/g, ''); 
 
    this.value = new_value; 
 
    
 
    $('#output').html(new_value); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type='text' id='name'> 
 

 
<div id='output'></div>

如果您需要跳过单个空格字符使用\s,所以使用/[^a-zA-Z.\s,ñÑ]/g代替/[^a-zA-Z. ,ñÑ]/g

+0

它仍然没有工作好先生。 –

+0

我只是将我的验证2次放入不同的js中,旧的和其他原因导致它无法正常工作的原因。我很感谢,谢谢先生。 –

0

试试这个:

this.value = this.value.replace(/[^a-zA-Z.,ñÑ\su00A0\u2008\u2009\u200A\u200B\u202F\uFEFF]/g, ''); 

这将标识许多Unicode的空间,包括非中断空格(U + 00A0),可以在HTML页面中出现。其他人将匹配格式化空间。还有更多的unicode空间,所以如果这不起作用,我们可以添加更多的代码。

0

使用keydown事件并取消e.which || e.keyCode不在允许的范围内。 实施例:在取消

$('#name').on('keydown', function(e){ 
    var key = e.which || e.keyCode; 
    if(allowedKeysArray.indexOf(key) ==-1) 
     return false; 
}); 

​​事件。 keyupkeypressedinput没有。您可以肯定地排除数字和大多数非字母字符。减号 - 只能看到字符,代码。

相关问题