Ruby: как проверить, содержит ли строка UTF-8 только буквы и цифры? - PullRequest
1 голос
/ 01 февраля 2011

У меня есть строка UTF-8, которая может быть на любом языке.

Как проверить, не содержит ли она не алфавитно-цифровых символов?

Я не смог найтитакой метод в геме UnicodeUtils Ruby.

Примеры:

  1. čččę91 - действительный
  2. $ 120D - недействительный

Ответы [ 3 ]

3 голосов
/ 01 февраля 2011

Вы можете использовать нотацию POSIX для буквенно-цифровых символов:

#!/usr/bin/env ruby -w
# encoding: UTF-8

puts RUBY_VERSION

valid = "ėččę91"
invalid = "$120D"

puts valid[/[[:alnum:]]+/]
puts invalid[/[^[:alnum:]]+/]

Какие выходные данные:

1.9.2
ėččę91
$
1 голос
/ 01 февраля 2011

Шаблон для одной буквенно-цифровой кодовой точки:

/[\p{Alphabetic}\p{Number}]/

Отсюда легко экстраполировать что-то вроде этого, у него есть минус:

/[^\p{Alphabetic}\p{Number}]/

или это все положительно:

 /^[\p{Alphabetic}\p{Number}]+$/

или иногда это, в зависимости от:

/\A[\p{Alphabetic}\p{Number}]+\z/

Выберите тот, который лучше всего соответствует вашим потребностям.

1 голос
/ 01 февраля 2011

В ruby ​​regex \ p {L} означает любую букву (в любом глифе)

, поэтому, если s представляет вашу строку:

 s.match /^[\p{L}\p{N}]+$/

Это отфильтровывает не цифры и буквы.

...