如何在正则表达式中允许a-z 0-9和破折号

时间:2018-07-26 19:52:20

标签: javascript regex

我有一个CMS,想在搜索引擎中创建一个不错的子弹

我试图用正则表达式来实现它,但是看起来它完全忽略了

一个小例子:

$('#name_nl').blur(function() {
        var string = $('#name_nl').val();
        string = string.replace(/[A-Za-z0-9]{0,1}[A-Za-z0-9-]/g,'');
        $('#slug_nl').val(string.toLowerCase());
        //console.log("Blurred name_nl");
    });

在上面的示例中,应在我允许第一个字符为A-Z a-z和0-9的情况下给出输出,此后还允许-。

但是当我在(WI-FI) network上进行测试时,我得到了(wi-fi) network

我已经在正则表达式测试仪上对其进行了测试,它看起来很棒 但是Javascript不喜欢它...

https://regex101.com/r/ev3uFR/2

如何删除每个特殊字符而不是-并将它们作为第一个和最后一个字符删除?

1 个答案:

答案 0 :(得分:4)

我建议在字符串的开头和结尾删除连字符,并在任何其他情况下删除字母数字和-以外的所有字符:

.replace(/^-+|-+$|[^A-Za-z0-9-]+/g, "")

请参见regex demo

详细信息

  • ^-+-字符串位置的开始,并且那里有1个或更多-字符
  • |-或
  • -+$-字符串末尾有1个或多个连字符
  • |-或
  • [^A-Za-z0-9-]+-1个或多个ASCII字母,数字或/和-字符。

JS演示:

console.log("a(WI-FI) netwerken".replace(/^-+|-+$|[^A-Za-z0-9-]+/g, ""));
console.log("--a(WI-FI) netwerken".replace(/^-+|-+$|[^A-Za-z0-9-]+/g, ""));
console.log("a(WI-FI) netwerken--".replace(/^-+|-+$|[^A-Za-z0-9-]+/g, ""));