2016-07-05 30 views
2

Ich versuche, ein Zeichenfolgenfeld zu überprüfen, um nach bestimmten Zeichen zu suchen, und einen Fehler auszulösen, wenn einer von ihnen vorhanden ist.Dies ist der reguläre Ausdruck, den ich verwende :Unterschied zwischen - und - oder 'und' oder "und"

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

Der JavaScript-Code in ServiceNow Plattform ist wie folgt:.

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

Es ist perfekt für alle enthaltenen Zeichen Arbeits wenn jedoch längliche Bindestrich () oder eine kurvige einfachen oder doppelten Anführungszeichen (, , , ) (die wir in Apps wie MS Word finden) werden verwendet, anstelle des normalen Bindestrichs oder der Anführungszeichen funktioniert diese Validierung nicht. Das heißt, es wird ein Fehler ausgelöst, wenn normale Bindestriche oder Anführungszeichen verwendet werden, aber nicht, wenn längere Bindestriche oder kurvige Anführungszeichen verwendet werden.

Ich habe sogar versucht, die neuen Charaktere in den regulären Ausdruck kopier einfügen, aber sie sind nur zu werden als die normalen ersetzt oder behandelt, das heißt:

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

in

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

wenn Ich klicke auf Speichern.

Wie integriere ich die Validierung für diese 3 Zeichen?

+1

Bitte zeigen Sie den Code Ihrer vorgeschlagenen Lösung, wo Sie versucht haben, die Zeichen zu kopieren. – Xufox

+0

Ja, bitte geben Sie den Code an, ohne den Kontext, in dem die Regex verwendet wird, ist es schwierig, eine konkrete Antwort zu geben – Taegost

+0

Ich wette, das wird ein Duplikat von [Ein Bindestrich in einer Regex-Zeichenklammer?] (http://stackoverflow.com/q/3697202/4642212). – Xufox

Antwort

0

Es gibt zwei Teile zu Ihrem regex nicht funktioniert:

Zuerst |-– in einer charcter Klasse bedeutet einen Bereich von | bis . Dies deckt 8087 verschiedene Unicode-Codepunkte ab - eindeutig nicht das, was Sie wollen. Wie in Including a hyphen in a regex character bracket? und einigen anderen verwandten Fragen wird dies dadurch gelöst, dass zu Ende geht oder es als \- entfernt wird.

Zweitens und wird zu " umgewandelt und ' sollte in jedem vernünftigen Texteditor nicht passieren. Verwenden Sie einen besseren Texteditor, erhalten Sie bessere Unicode-Unterstützung oder ersetzen Sie durch \u201D und durch \u2019 - ihre jeweiligen Unicode-Hex-Codes.

Ihre letzte Regex würde so aussehen, dann:

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

Wenn Sie sie benötigen, die Unicode Hex-Code für \u201C ist, für es \u2018 ist und für ist es \u2013.

+0

Hallo Xufox! Ich bin wieder auf ein ähnliches Problem gestoßen. Dieses Unicode-Zeichen funktionierte perfekt, aber ich muss etwas ändern. Im Moment schließe ich alle einfachen Anführungszeichen/Apostrophe aus (sowohl gerade als auch lockig). Ich habe gerade Zitate aus der Regex ausgeschlossen, aber es wird immer noch validiert. Wenn ich dasselbe mit doppelten Anführungszeichen testete, akzeptierte es gerade Anführungszeichen und validierte gegen lockige. Es funktioniert nicht ähnlich mit einfachen Anführungszeichen. Nur "lockige" Apostrophe sollten als ungültig betrachtet werden. Ich möchte also gerade Apostrophe akzeptieren können. –

+0

Dies ist der Code, den ich habe und nicht funktioniert. (Es hat keinen geraden Apostroph, akzeptiert es aber immer noch nicht) var regex =/^ [^ \\\/\: \ * \? "\ U02BC \ u055A \ u201C \ u201D \ u201E \ u201F \ u2012 \ u2013 \ u2014 \ u2015 \ u007c <> \ | -] * $ /; var am = g_form.getValue ('u_native_renaming_suffix'); \t wenn { \t \t alert (‘(regex.test (am)!) Bitte geben Sie eine gültige Zeichenfolge für "native Umbenennung Suffix" '); \t \t //g_form.clearValue('u_native_renaming_suffix'); \t \t return; \t} –

Verwandte Themen