2010-01-20 4 views
3

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

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

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

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

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

+0

Значит, à, ü и ß не должны считаться буквенно-цифровыми? –

ответ

6
[a-zA-Z0-9].*[a-zA-Z0-9] 

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


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

+1

better do '. *?' - это приведет к возврату регулярного выражения и, вероятно, быстрее (он найдет минимальную подстроку вместо максимального). – Kobi

+0

поблагодарить uuuuuuuuuu очень много его работы fineeeeeeeeeeeeeeeeeeeeee ... Я хочу научиться писать регулярные выражения ... так что если у вас есть какие-либо ссылки, то книги r могли бы уходить вперед .... Спасибо u – VInayK

+0

@Kobi Спасибо. Отредактировал мой ответ. @OP http://www.regular-expressions.info/ – jensgram

0

Как просто, как

'\w.*\w' 
+3

'\ w' включает в себя символ подчеркивания, который ... не совсем буквенно-цифровой. – Joey

+0

Yup. Хотя '\ w' может соответствовать' _' (в зависимости от реализации, я полагаю). – jensgram

+0

Хмм, по крайней мере, я не единственный, кто может это увидеть :) – jensgram

2

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

[a-zA-Z0-9][^a-zA-Z0-9]*[a-zA-Z0-9] 
+0

это не удастся для этого: ab ( – Aadith

+1

@Aadith: Не определенно не будет. Неалфавитно-цифровое выражение в середине количественно определяется нулем или больше ('*'). – Gumbo

+0

первый [a-zA-Z0-9] будет соответствовать «a». [^ a-zA-Z0-9] * ничего не будет соответствовать. второй [a-zA-Z0 -9] будет соответствовать 'b'. Что бы ни случилось после второго буквенно-цифрового символа? («В примере, который я дал в моем предварительном комментарии) – Aadith

1

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

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

или

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

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

0

В ответ на комментарий, приведено сравнение производительности для жадных [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] 

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

Смежные вопросы