Проверка регулярных выражений в рельсах

Более быстрые результаты могут быть достигнуты с помощью numpy.where .

Например, при настройке unubtu -

In [76]: df.iloc[np.where(df.A.values=='foo')]
Out[76]: 
     A      B  C   D
0  foo    one  0   0
2  foo    two  2   4
4  foo    two  4   8
6  foo    one  6  12
7  foo  three  7  14

Сроки сравнения:

In [68]: %timeit df.iloc[np.where(df.A.values=='foo')]  # fastest
1000 loops, best of 3: 380 µs per loop

In [69]: %timeit df.loc[df['A'] == 'foo']
1000 loops, best of 3: 745 µs per loop

In [71]: %timeit df.loc[df['A'].isin(['foo'])]
1000 loops, best of 3: 562 µs per loop

In [72]: %timeit df[df.A=='foo']
1000 loops, best of 3: 796 µs per loop

In [74]: %timeit df.query('(A=="foo")')  # slowest
1000 loops, best of 3: 1.71 ms per loop

2
задан Pierre Laburthe 18 January 2019 в 16:20
поделиться

1 ответ

Когда вы проверяете формат с помощью регулярных выражений, вы должны убедиться, что вы соответствуете всей проверяемой строке. Для этого ваше регулярное выражение должно начинаться с \A и заканчиваться \z, которые являются якорями, отмечающими начало и конец строки.

В вашем случае:

validates :first_name, 
  presence: true, 
  length: {maximum: 25}, 
  format: {with: /\A[-0-9A-Za-z]\z'/}
  message: "Custom message"

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

0
ответ дан mrzasa 18 January 2019 в 16:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: