2013-06-24 8 views
0

Мне нужно регулярное выражение, которое позволит использовать алфавиты, дефис (-), цитату ('), точку (.), Запятую (,) и пробел. это то, что я есть сейчасРегулярное выражение для специальных символов

^[A-Za-z\s\-]$ 

Благодаря

+3

Что мешает вам добавить другие разрешенные символы? У вас была проблема? –

+0

Добавьте точку, цитату и запятую в класс символов? Я считаю, что вам тоже не хватает квантификатора. –

+0

Это не имело ничего общего ** с Javascript ... – Neal

ответ

0

Вы, вероятно, пробовали new RegExp("^[A-Za-z\s\-\.\'\"\,]$"). Тем не менее, у вас есть строковый литерал, и обратные косые черты просто уходят от следующих символов - необходимо только для разделительной цитаты (и для обратных косых черт).

"^[A-Za-z\s\-\.\'\"\,]$" === "^[A-Za-zs-.'\",]$" === '^[A-Za-zs-.\'",]$' 

Тем не менее, диапазон s-.является недействительным. Так что вам нужно будет, чтобы избежать обратной косой черты, чтобы передать строку с обратной косой чертой в конструктору RegExp:

new RegExp("^[A-Za-z\\s\\-\\.\\'\\\"\\,]$") 

Вместо regex literals легче читать и писать, как вам не нужно, чтобы строка-экранирующих символов регулярное выражение побега. Кроме того, они анализируются только один раз во время компиляции скрипта - ничто не должно выполняться каждый раз, когда вы оцениваете строку. RegExp constructor нужно использовать только в том случае, если вы хотите динамически создавать регулярные выражения. Поэтому используйте

/^[A-Za-z\s\-\.\'\"\,]$/ 

и он будет работать. Кроме того, вам не нужно, чтобы избежать какой-либо из этих символов в character class - так это просто

/^[A-Za-z\s\-.'",]$/ 
1

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

^[A-Za-z\-'., ]+$ 

Это соответствует началу строки. Любой символ в наборе 1 или более раз и конец строки. Вам не нужно избегать . в комплекте, на случай, если вам интересно.

0

Вы довольно близко, попробуйте следующее:

^[A-Za-z\s\-'.,]+$ 

Обратите внимание, что я предположил, что вы хотите, чтобы соответствовать строки, содержащие один или более любого из этих символов, поэтому я добавил + после символьного класса, который означает «повторять предыдущий элемент один или несколько раз».

Обратите внимание, что в настоящее время это также позволяет добавлять вкладки и разрывы строк в дополнение к пробелам, потому что \s будет соответствовать любому символу пробела. Если вы хотите разрешить пробелы, измените его на ^[A-Za-z \-'.,]+$ (просто замените \s пробелом).