2016-07-05 3 views
2

Я пытаюсь проверить строковое поле, чтобы проверить определенные символы и поднять ошибку, если они есть. Это регулярное выражение, которое я использую :Разница между - и - или 'и' или "и"

var regex = /^[^'\\\/\:\*\?"<>\|-]*$/; // In ServiceNow 

код JavaScript в ServiceNow платформы выглядит следующим образом:.

function onChange(control, oldValue, newValue, isLoading, isTemplate) { 
    if (isLoading || newValue === '') { 
     return; 
    } 

    var regex = /^[^'\\\/\:\*\?"<>\|-]*$/; 
    var ans = g_form.getValue('u_native_renaming_suffix'); 
    if(!regex.test(ans)){ 
     alert('Please enter valid string'); 
     return; 
    } 
} 

Он прекрасно работает для всех включенных символов Однако, когда удлиненные дефис () или соблазнительной одинарной или двойной кавычки (, , , ) (которые мы находим в приложениях, таких как MS Word), вместо обычной дефисы или кавычек эта проверка не работает. То есть, это вызывает ошибку, когда используются обычные дефис или кавычки, но не когда используются удлиненные дефис или кривые кавычки.

Я даже пытался копировать-вставить новые символы в регулярном выражении, но они просто заменяются или обработаны как нормальные, а именно:

/^[^'’\\\/\:*\?"”<>\|-–]*$/ 

превращается в

/^[^''\\\/\:*\?""<>\|-–]*$/ 

когда Я нажал save.

Как включить подтверждение для этих трех символов?

+1

Пожалуйста, продемонстрируйте код вашего предлагаемого решения там, где вы пытались скопировать-вставить символы. – Xufox

+0

Да, пожалуйста, предоставьте код без контекста использования регулярного выражения, трудно дать конкретный ответ – Taegost

+0

Держу пари, это будет дубликат [Включая дефис в символьной скобке регулярных выражений?] (http://stackoverflow.com/q/3697202/4642212). – Xufox

ответ

0

Есть две части в своем регулярном выражении не работает:

во-первых, |-– в классе charcter означает диапазон от | до . Это охватывает 8087 различных кодовых пунктов Unicode - явно не то, что вы хотите. Как и в случае с Including a hyphen in a regex character bracket? и несколькими другими связанными с ними вопросами, это решается путем перемещения - до конца или выхода из него как \-.

Во-вторых, и преобразуются в " и ' не должно произойти в любом разумном текстовом редакторе. Используйте лучший текстовый редактор, получите лучшую поддержку Unicode или замените на \u201D и на \u2019 - их соответствующие шестнадцатеричные коды Unicode.

Ваше окончательное регулярное выражение будет выглядеть следующим образом, то:

/^[^'\u2019\\\/\:*\?"\u201D<>\|–-]*$/ 

Если вы нуждаетесь в них, шестнадцатеричный код Unicode для \u201C является для это \u2018 и это \u2013.

+0

Привет, xufox! Я снова столкнулся с подобной проблемой. Эта вещь символов Unicode работала отлично, но мне нужно что-то изменить. Прямо сейчас я исключаю все одинарные кавычки/апострофы (как прямые, так и курчавые). Я исключил прямую цитату из регулярного выражения, но все еще проверяет ее. Когда я тестировал то же самое с двойными кавычками, он принимал прямые кавычки и проверял их на фигурные. Он не работает аналогично одинарным кавычкам. Только «фигурные» апострофы должны считаться недействительными. Поэтому я хочу иметь возможность принимать прямые апострофы. –

+0

Это код, который у меня есть и не работает. (У него нет прямого апострофа, но он его еще не принимает) var regex =/^ [^ \\\/\: \ * \? "\ U02BC \ u055A \ u201C \ u201D \ u201E \ u201F \ u2012 \ u2013 \ u2014 \ u2015 \ u007c <> \ | -] * $ /; вар анс = g_form.getValue ('u_native_renaming_suffix'); \t если { \t \t оповещения (»(regex.test (ANS)!) Пожалуйста, введите правильную строку для "Родная Переименование суффикса" '); \t \t //g_form.clearValue('u_native_renaming_suffix'); \t \t возвращение; \t} –

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