首页 > 解决方案 > 如何在正则表达式中允许 az 0-9 和破折号

问题描述

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

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

一个小例子:

$('#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");
    });

在上面的示例中,它应该给出我允许第一个字符为 AZ az 和 0-9 的输出,之后也允许使用 -。

但是当我测试它时,(WI-FI) network我得到了(wi-fi) network

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

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

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

标签: javascriptregex

解决方案


我建议删除字符串开头和结尾的连字符,并删除除字母数字和-任何其他上下文中的所有字符:

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

请参阅正则表达式演示

细节

  • ^-+- 字符串位置的开头和 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, ""));


推荐阅读