mysql - Regular expression for 1-50 without decimal point -


i looking regular expression match number 1 50 inclusive. far, have found examples allow string contain decimal point, not want include. 1,13,24,50 ok 1. ,etc not. there regexp can use?

thanks in advance, tim

try this:

/^(?:[1-9]|[1-4][0-9]|50)$/ 

update:

now see question has been updated refer mysql, changes things significantly. above-mentioned regular expression uses non-capturing parens not supported mysql. begs question; should using regular expressions solve problem? have @ how storing numbers must between 1 , 50. varchars? ints? i'll demonstrate how solve both ways. first i'll set test table indexes:

create table regextest (     id int unsigned primary key auto_increment,     varchar_number varchar(5) not null,     int_number int not null,     index(varchar_number),     index(int_number) ) engine=innodb; 

now put test data making sure our edge cases covered:

insert regextest (varchar_number, int_number)     values ('0', 0), ('1', 1), ('35', 35), ('49', 49), ('50', 50), ('51', 51); 

and now, here query solve problem assuming numbers stored strings in varchar_number column:

mysql> select * regextest varchar_number rlike '^([1-9]|[1-4][0-9]|50)$'; +----+----------------+------------+ | id | varchar_number | int_number | +----+----------------+------------+ |  2 | 1              |          1 | |  3 | 35             |         35 | |  4 | 49             |         49 | |  5 | 50             |         50 | +----+----------------+------------+ 4 rows in set (0.00 sec) 

this works perform poorly on large data sets because can't use index if 1 present. mysql must run regular expression once every row in table. suppose numbers between 1 , 50 stored ints in int_number column. this:

mysql> select * regextest int_number between 1 , 50; +----+----------------+------------+ | id | varchar_number | int_number | +----+----------------+------------+ |  2 | 1              |          1 | |  3 | 35             |         35 | |  4 | 49             |         49 | |  5 | 50             |         50 | +----+----------------+------------+ 4 rows in set (0.00 sec) 

this query perform because can use index , it's more readable , more maintainable. wins around.


Comments

Popular posts from this blog

Add email recipient to all new Trac tickets -

400 Bad Request on Apache/PHP AddHandler wrapper -

php - Change action and image src url's with jQuery -