2016-07-05 25 views
2

文字列フィールドを検証して特定の文字をチェックし、いずれかが存在する場合はエラーを発生させようとしています。これは私が使用している正規表現です:それはすべて含まれた文字のために完璧に働いている差異 - と - と 'と'または 'と'と

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; 
    } 
} 

ただし、ハイフン()または曲線美単一または二重引用符を伸長したときに次のように

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

ServiceNowプラットフォーム内のJavaScriptコードがあります。 (,通常のハイフンや引用符の代わりに、この検証は機能しません(MS Wordのようなアプリで見つけられる)。つまり、通常のハイフンや引用符を使用するとエラーが発生しますが、細長いハイフンや曲面の引用符を使用した場合はエラーになりません。

私も、正規表現に新しい文字をコピーペーストしてみましたが、彼らはただすなわち、交換または通常のものとして扱われている:

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

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

に変身私はセーブしました。

これらの3文字についても検証を組み込むにはどうすればよいですか?

+1

文字をコピーして貼り付けようとしたときに提案されたソリューションのコードを表示してください。 – Xufox

+0

はい、正規表現がどこで使用されているかの文脈を使わずにコードを提供してください。具体的な回答は難しい – Taegost

+0

私は[正規表現の文字括弧内にハイフンを含める?] http://stackoverflow.com/q/3697202/4642212)。 – Xufox

答えて

0

機能していないあなたの正規表現には2つの部分があります

まず、|-–はcharcterクラスでは|からの範囲を意味します。これは8087種類のUnicodeコードポイントをカバーしています。 Including a hyphen in a regex character bracket?と同様に、-を末尾に移動するか、\-としてエスケープすることで解決します。

第2に、は、"'に変換されますが、適切なテキストエディタでは発生しません。より良いテキストエディタを使用して、より良いUnicodeサポートを入手するか、またはを\u201Dおよびで置き換えて\u2019 - それぞれのUnicode 16進コードに置き換えてください。

最終的な正規表現は、その後、次のようになります。

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

をあなたがそれらを必要とする場合は、のUnicode 16進コードがことが\u2018だ、\u201Cで、ことが\u2013です。

+0

こんにちはxufox!私も同様の問題に遭遇しました。そのユニコード文字は完全に動作していましたが、何かを変更する必要があります。今、私はすべての単一引用符/アポストロフィ(直線と中括弧の両方)を除外しています。私は正規表現から直接引用符を除外しましたが、それはまだ検証しています。私は二重引用符で同じことをテストしたとき、それはまっすぐ引用符を受け入れると、中に引用符で妥当性を検証した。シングルクォートと同様に動作しません。 "縮められた"アポストロフィだけが無効であるとみなす必要があります。だから私はまっすぐアポストロフィを受け入れることができるようにしたい。 –

+0

これは私が持っていて働いていないコードです。 (これは、ストレートアポストロフィを持っていないが、それはまだそれを受け入れるイマイチ) するvar正規表現=/^ [^ \\\/\:?\ * \ "\ u02BC \ u055A \ u201C \ u201D \ u201E \ u201F \ u2012 \ u2013 \ u2014 \ u2015 \ u007c <> \ | - ] * $ /; VAR ANS = 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を} –

関連する問題