Регулярное выражение для проверки поля: поле должно содержать как минимум 2 буквенно-цифровых символа - PullRequest
3 голосов
/ 20 января 2010

Мне нужно проверить поле VARCHAR. условия: поле должно содержать как минимум 2 буквенно-цифровых символа

поэтому, пожалуйста, дайте регулярное выражение для вышеуказанных условий

Я написал ниже выражение, но оно проверит, что по крайней мере 2 буквы являются буквенно-цифровыми. и если мой ввод будет отличаться от буквенно-цифрового, он не проверяется.

'^ [A-Za-Z0-9] {2} $'

, пожалуйста, помогите .........

Ответы [ 5 ]

6 голосов
/ 20 января 2010
[a-zA-Z0-9].*[a-zA-Z0-9]

Простой способ: в строке есть как минимум два alnum.


Ответ на комментарий
Я никогда не делал (и не собирался делать) никаких тестов. Поэтому - и учитывая, что мы ничего не знаем об окружающей среде OP - я не один, чтобы судить, будет ли не жадная версия ([a-zA-Z0-9].*?[a-zA-Z0-9]) более эффективной. Я делаю , однако, считаю, что влияние на производительность совершенно незначительно:)

2 голосов
/ 20 января 2010

Я бы, наверное, использовал это регулярное выражение:

[a-zA-Z0-9][^a-zA-Z0-9]*[a-zA-Z0-9]
1 голос
/ 20 января 2010

Насколько широко ваше буквенно-цифровое определение? Для US ASCII см. Ответы выше. Для более космополитического вида используйте один из

[[:alnum:]].*[[:alnum:]]

или

[^\W_].*[^\W_]

Последний работает, потому что \w соответствует «символу слова», буквенно-цифровым символам и подчеркиванию. Используйте двойной отрицательный знак, чтобы исключить подчеркивание: «не не-слово-символ и не подчеркивание».

0 голосов
/ 21 января 2010

В ответ на комментарий вот сравнение производительности для жадных [a-zA-Z0-9].*[a-zA-Z0-9] и не жадных [a-zA-Z0-9].*?[a-zA-Z0-9].

Жадная версия найдет первый алфавитно-цифровой код, полностью совпадет до конца и вернется к последнему буквенно-цифровому номеру, найдя максимально возможное совпадение. Для длинной строки это самая медленная версия. Нежадная версия находит первый буквенно-цифровой код и пытается не соответствовать следующим символам, пока не будет найден другой буквенно-цифровой символ (т. Е. Для каждой буквы, совпадающей с пустой строкой, она пытается найти [a-zA-Z0-9], потерпит неудачу и .) .

Сравнительный анализ (эмпирические результаты):
Если буквенно-цифровые символы расположены очень далеко, жадная версия быстрее (даже быстрее, чем версия Gumbo).
Если буквенно-цифровые символы близки друг к другу, жадная версия значительно медленнее.

Тест: http://jsbin.com/eletu/4
Сравнивает 3 версии:

[a-zA-Z0-9].*?[a-zA-Z0-9]
[a-zA-Z0-9][^a-zA-Z0-9]*[a-zA-Z0-9]
[a-zA-Z0-9].*[a-zA-Z0-9]

Вывод: нет. Как всегда, вы должны проверить типичные данные.

0 голосов
/ 20 января 2010

Так же просто, как

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