正则表达式任何ASCII字符


77

要匹配的正则表达式是xxx[any ASCII character here, spaces included]+xxx什么?

我正在尝试xxx[(\w)(\W)(\s)]+xxx,但似乎没有用。

Answers:


89

如果您的意思是任何和ASCII(不是所有Unicode字符):

xxx[\x00-\x7F]+xxx

JavaScript示例:

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

re.test('xxxabcxxx')
// true

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

这似乎不像我想的那样工作。这匹配ascii字符的BYTE表示,而不是视觉印刷/键入字符本身吗?
anon58192932

@拥护者,是的。您使用哪种语言进行测试?可能就是这样。
马修·弗拉申

哦,我希望找到与ASCII字符的印刷版本匹配的东西:)
anon58192932

11
@拥护者,我认为您正在寻找^[\x20-\x7F]+$
wrygiel 2013年

如此好的解决方案,我见过很多坏的解决方案。我不知道正则表达式能够按字符代码过滤,优雅!
约翰

88
[ -~]

这里看到了。它匹配从空格到波浪号的所有ASCII字符。

因此,您的实现将是:

xxx[ -~]+xxx

这是完美的,因为可接受的答案不适用于ASP.NET MVC中的[RegularExpression]属性-它被呈现为Unicode字符,这破坏了验证。
艺术

4
真正优雅的解决方案,具有高度可读性,并且在语义上完全符合我的需求。
机器渴望

@Art这对我不起作用,具有[RegularExpression]属性...您是否需要做其他特别的工作才能使其起作用?我的属性是,<Component.DataAnnotations.RegularExpression("[ -~]", ErrorMessage:="Contains invalid characters.")>但不会接受“ asdf”。
扎克

我想没关系。我只是意识到只能匹配一个字符,因此我不得不添加+以使其成为[ -~]+“任何一个ascii字符,一次或多次”。
扎克

1
@Zack可以查看我用完整的示例代码编写的本文:nimblegecko.com/…希望对您有所帮助,让我知道您是否被卡住!
艺术

26

您可以使用[[:ascii:]]该类。


@catwalk你是我今天的英雄!由于某种原因,它不接受\ x00- \ x7F,但是它花了[:ascii:]。谢谢!
n0nag0n 2012年

6
请注意,[[:ascii:]]将匹配任何ASCII字符,甚至是不可打印的字符,而[-〜]将仅匹配ASCII的可打印子集。
elolos 2014年

“人物阶级”
彼得·莫滕森

注意:更好的名称是“ POSIX expression”,而不是“ class”。请注意,并非每种语言都支持它,例如JavaScript并不支持它。
Daniel B.

10

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

xxx[\x00-\x7F]+xxx

4

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

请注意,实际上包含的内容超出了您的需要-ASCII仅定义了前128个字符。



0

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

xxx.+xxx

0

根据您对“ ASCII字符”的含义,可以尝试:

xxx.+xxx
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.