正则表达式匹配任何ASCII字符。

102

如何匹配 xxx[这里可以是任意ASCII字符,包括空格]+xxx 的正则表达式?

我尝试使用 xxx[(\w)(\W)(\s)]+xxx,但好像无法生效。

8个回答

142
[ -~]

这个正则表达式可以在这里找到。它匹配从空格到波浪号之间的所有ASCII字符。

因此,您的实现将是:

xxx[ -~]+xxx

这很完美,因为在ASP.NET MVC中使用[RegularExpression]属性时,接受的答案无法正常工作 - 它会呈现为Unicode字符,从而破坏验证。 - Art
4
非常优雅的解决方案,易于阅读,并且语义上恰好符合我需要的要求。 - machine yearning
1
我想没关系了。我刚意识到这只会匹配一个字符,所以我必须添加 + 使其变成 [ -~]+,即“任何 ASCII 字符,一次或多次”以适应我的需求。 - Zack
1
@Zack 你看看我写的这篇文章,里面有完整可用的示例代码:http://nimblegecko.com/how-to-validate-a-textfield-for-only-printable-characters-in-aspnet-mvc/ 希望对你有所帮助,如果有问题就告诉我! - Art
非常有用。我使用了 [^ -~] 并将每个匹配替换为空字符串以删除非 ASCII 字符。 - Sebastian
显示剩余3条评论

114
如果您真的是指“任何”ASCII(例如不是所有Unicode字符):
xxx[\x00-\x7F]+xxx

JavaScript 示例:

var re = /xxx[\x00-\x7F]+xxx/;

re.test('xxxabcxxx')
// true

re.test('xxx☃☃☃xxx')
// false

1
@advocate,是的,它确实有这个功能。你测试用的是哪种语言?可能是这个原因。 - Matthew Flaschen
1
哦,我希望能找到与ASCII字符的打印版本相匹配的东西 :) - fIwJlxSzApHEZIl
16
@advocate,我认为你正在寻找“^[\x20-\x7F]+$”。该正则表达式可以用于匹配ASCII字符集中的所有可打印字符。 - wrygiel
1
这是一个非常好的解决方案,我见过很多糟糕的解决方案。我之前不知道正则表达式可以通过字符编码进行过滤,太优雅了! - John
3
@wrygiel 小修正,因为 x7F 不可打印(它是 DEL 字符)。应该是 ^[\x20-\x7E]+$ - AnorZaken
显示剩余2条评论

36
你可以使用[[:ascii:]]类。

@catwalk 你今天是我的英雄!由于某些原因,它不能接受\x00-\x7F,但它接受了[:ascii:]。谢谢! - n0nag0n
12
请注意,[[:ascii:]]将匹配任何ASCII字符,甚至包括不可打印的字符,而[ -~]只会匹配ASCII可打印字符的子集。 - elolos
2
"字符类" - Peter Mortensen
1
注意:"类"的更好名称应该是"POSIX表达式"。请注意,它并不被每种编程语言支持,例如JavaScript就不支持它。 - Daniel B.
我希望这在PowerShell中能够运行。 - js2010

11

由于US-ASCII字符位于0x00-0x7F(0-127)的字节范围内:

xxx[\x00-\x7F]+xxx

8

仅接受/匹配ASCII字符

/^[\x00-\x7F]*$/

2

尝试使用.+代替[(\w)(\W)(\s)]+

请注意,这实际上包括了你所需的内容 - ASCII仅定义了前128个字符。


0

根据你对“ASCII字符”的理解,你可以尝试:

xxx.+xxx

-2

.代表任意字符,因此您可以像这样编写正则表达式:

xxx.+xxx

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