Regex, который допускает только пустые строки, буквы, цифры или пробелы? - PullRequest
0 голосов
/ 27 января 2020

Нужна помощь в создании регулярного выражения, которое допускает только цифры, буквы, пустую строку или пробелы.

^[_A-z0-9]*((-|\s)*[_A-z0-9])*$

Это самое близкое, что я нашел, но оно позволяет использовать подчеркивание и дефис.

Ответы [ 3 ]

3 голосов
/ 27 января 2020

Только буквы, цифры, пробел или пустая строка?
Тогда подойдет 1 класс символов.

^[A-Za-z0-9 ]*$
^ : start of the string or line (depending on the flag)
[A-Za-z0-9 ]* : zero or more upper-case or lower-case letters, or digits, or spaces.
$ : end of the string or line (depending on the flag) 

Диапазон A-z содержит больше, чем просто буквы.
Это можно увидеть в таблице ASCII .

И \s для пробелов также включают символы табуляции или переносы строк (в зависимости от флага).
Но если вы также хотите их использовать, просто используйте это вместо пробела.

^[A-Za-z0-9\s]*$

Кроме того, в зависимости от движка / диалекта регулярных выражений, который использует ваш язык / инструмент, вы можете использовать \p{L} для любой буквы Unicode.
Поскольку [A-Za-z] включает только обычные буквы ASCII.
Ссылка здесь

1 голос
/ 27 января 2020

Ваше регулярное выражение слишком сложно для того, что вам нужно. первая часть в порядке, вы разрешаете буквы и цифры, вы можете просто добавить пробел с ним.

Тогда, если вы используете символ *, который переводится в 0 или любой другой, вы можете решить проблему с пустой строкой.

См. Здесь.

/^[a-z0-9 ]*$/gmi

Обратите внимание, что я не использую A-z, как вы, потому что это переводит на любой символ между A в ascii (101) и z (172). это означает, что он также будет соответствовать символу между (от 133 до 141, которые не являются ни цифрой, ни буквой). Вместо этого я использую a-z, которые разрешают строчные буквы, и использовал флаг i, который указывает регулярному выражению не заботиться о регистре.

Вот визуальное объяснение регулярного выражения

Regular expression visualization

Вы также можете проверить больше случаев в этом регулярном выражении101

0 голосов
/ 27 января 2020

Совпадение только с определенными символами эквивалентно несовпадению с любым другим символом, поэтому вы можете использовать регулярное выражение r = /[^a-z\d ]/i, чтобы определить, содержит ли строка какой-либо символ, кроме разрешенных. В Ruby это будет реализовано следующим образом.

"aBc d01e e$9" !~ r #=> false
"aBc d01e ex9" !~ r #=> true

В этой ситуации может не так много выбора между этим подходом и попыткой сопоставления /\A[a-z\d ]+\z/i, но в других ситуациях используется отрицательное совпадение может значительно упростить регулярное выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...