Змінюйте будь-який символ ASCII


77

Що означає регулярний вираз xxx[any ASCII character here, spaces included]+xxx?

Я намагаюся xxx[(\w)(\W)(\s)]+xxx, але, здається, це не працює.

Відповіді:


89

Якщо ви дійсно маєте на увазі будь-який та ASCII (наприклад, не всі символи Unicode):

xxx[\x00-\x7F]+xxx

Приклад JavaScript:

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

re.test('xxxabcxxx')
// true

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

здається, це працює не так, як я думав. Це відповідає поданням BYTE символів ascii, а не самим візуальним друкованим / набраним символам?
anon58192932

@advocate, так, це так. Якою мовою ви тестували? Це могло бути все.
Matthew Flaschen

о, я сподівався знайти щось, що відповідало б друкованим версіям символів ASCII :)
anon58192932

11
@advocate, я думаю, ти шукаєш ^[\x20-\x7F]+$.
wrygiel

Таке гарне рішення, я бачив стільки поганих. Я не знав, що регулярний вираз може фільтрувати за кодом символів, елегантно!
Джон

89
[ -~]

Це було видно тут . Він відповідає всім символам ASCII від простору до тильди.

Отже, ваша реалізація буде такою:

xxx[ -~]+xxx

Це ідеально, оскільки прийнята відповідь не працювала з атрибутом [RegularExpression] в ASP.NET MVC - вона відображається як символи Unicode, і це порушує перевірку.
Мистецтво

4
Дійсно елегантне рішення, добре читабельне та семантично саме те, що я шукав.
машина прагне

@Art Це не працює для мене з [RegularExpression]атрибутом ... Чи потрібно було робити щось інше, щоб це працювало? Мій атрибут просто, <Component.DataAnnotations.RegularExpression("[ -~]", ErrorMessage:="Contains invalid characters.")>але навіть не приймає "asdf".
Зак

Гадаю, неважливо. Я тільки що зрозумів, що буде відповідати лише одному символу, тому мені довелося додати знак +, щоб зробити його [ -~]+"будь-яким символом ascii, один або кілька разів" для мого використання.
Зак

1
@Zack ознайомтесь із цією статтею, яку я написав із повністю працюючим прикладом коду: nimblegecko.com/... Сподіваюся, це допоможе, і дайте мені знати, якщо ви застрягли!
Арт

26

Ви можете використовувати [[:ascii:]]клас.


@catwalk Ти сьогодні мій герой! З якоїсь причини він не приймав \ x00- \ x7F, але він зайняв [: ascii:]. Дякую!
n0nag0n

6
Зауважте, що [[: ascii:]] відповідає будь-якому символу ASCII, навіть недрукованим, тоді як [- ~] відповідає лише підмножині ASCII, що друкується.
elolos 02

"клас персонажів" ?
Пітер Мортенсен,

Примітка: Кращою назвою буде "вираз POSIX", а не "клас". Майте на увазі, що він підтримується не всіма мовами, наприклад JavaScript, не підтримує його.
Даніель Б.

10

Оскільки символи US-ASCII знаходяться в діапазоні байтів 0x00–0x7F (0–127):

xxx[\x00-\x7F]+xxx

4

Спробуйте використовувати .+замість [(\w)(\W)(\s)]+.

Зверніть увагу, що це насправді включає більше, ніж вам потрібно - ASCII визначає лише перші 128 символів.



0

. означає будь-який символ, тому ви пишете свій регулярний вираз так:

xxx.+xxx

0

Залежно від того, що ви маєте на увазі під символом "ASCII", ви можете просто спробувати:

xxx.+xxx
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.