只允许变量中的两个单词但允许短划线

时间:2018-03-30 10:21:41

标签: javascript

我需要阻止用户输入超过2个单词,但允许包含短划线的单词。

允许

迈克 - 大卫史密斯

不允许

迈克大卫史密斯

我的代码如下,仅适用于允许两个单词,但无法识别带短划线的单词作为一个单词

<script type="text/javascript">//<![CDATA[
$(function(){
var maxWords = 2;
jQuery('#fullname').keypress(function() {
var $this, wordcount;
$this = $(this);
wordcount = $this.val().split(/\b[\s,\.-:;]*/).length;
if (wordcount > maxWords) {
    alert("Please enter a maximum of 2 words (forename and surname)");
    return false;
} 
});

jQuery('#fullname').change(function() {
var words = $(this).val().split(/\b[\s,\.-:;]*/);
if (words.length > maxWords) {

    words.splice(maxWords);
    $(this).val('');
   ////////// alert("Please enter a maximum of 2 words (forename and 
surname)");
}
});
});//]]> 

</script>

非常感谢提前

1 个答案:

答案 0 :(得分:1)

在正则表达式中进行以下更改

  • 无需定义单词边界\b - 因为您正在拆分,而不是匹配。
  • 从集
  • 中删除-
  • +而不是*允许连续的冒号空格等作为一个分隔符

"Mike-David Smith".split(/[\s,\.:;]+/) //["Mike-David", "Smith"]

<强>演示

var regex  = /[\s,\.:;]+/;

console.log("Mike-David Smith".split(regex));
console.log("Mike David Smith".split(regex));
console.log("Mike-David-Smith".split(regex));