使用JavaScript仅保留A-Z和0-9,并从字符串中删除其他字符

49

我试图验证字符串,以便将其转换为有效的URL

我需要使用javascriptjquery仅保留A-Z 0-9并从字符串中删除其他字符

例如:

Belle’s Restaurant

我需要将其转换为:

Belle-s-Restaurant

因此,字符’s被删除,仅保留A-Z a-z 0-9

谢谢


您以错误的编码方式读取了字符串。如果您将其解码为UTF-8,则可以看到该字符是U+2019,即字符。虽然这不会影响此处的解决方案,因为UTF-8保证ASCII代码不会出现在多字节代码中,但我认为您仍应更新您的代码以使用正确的文本编码。如果您在此处犯了这个错误,其他人可能会复制您的代码并在其他地方犯同样的错误,这将向您的客户显示。 - Mark Byers
3个回答

72

通过将我们的.cleanup()方法添加到String对象本身,您可以通过调用本地方法来简单地清理JavaScript中的任何字符串,例如:

# Attaching our method to the String Object
String.prototype.cleanup = function() {
   return this.toLowerCase().replace(/[^a-zA-Z0-9]+/g, "-");
}

# Using our new .cleanup() method
var clean = "Hello World".cleanup(); // "hello-world"

由于正则表达式末尾有一个加号,它匹配一个或多个字符。因此,输出将始终有一个 '-' ,用于表示一个或多个非字母数字字符的连续序列:

# An example to demonstrate the effect of the plus sign in the regular expression above
var foo = "  Hello   World    . . .     ".cleanup(); // "-hello-world-"
没有加号,最后一个例子的结果将是"--hello-world--------------"

3
如果要转换为小写字母,为什么还需要A-Z? - Lawrence Cherone

8
如果你想在其他字符的位置使用短横线,可以用以下方式实现:
string.replace(/[^a-zA-Z0-9]/g,'-');

3
假设字符串保存在名为 BizName 的变量中:
BizName.replace(/[^a-zA-Z0-9]/g, '-');

BizName现在只应包含所请求的字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接