Как мне подражать регулярному выражению Unicode JS в Lucee - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь написать регулярное выражение в Lucee, чтобы имитировать JS на переднем конце.Поскольку регулярное выражение Люси, похоже, не поддерживает юникод, как мне это сделать.

Это JS

function charTest(k){
    var regexp = /^[\u00C0-\u00ff\s -\~]+$/;
    return regexp.test(k)
}

if(!charTest(thisKey)){
    alert("Please Use Latin Characters Only");
    return false;
}

Это то, что я пробовал в Люси

regexp = '[\u00C0-\u00ff\s -\~]+/';
writeDump(reFind(regexp,"测));
writeDump(reFind(regexp,"test));

Я также пытался

 regexp = "[\\p{L}]";

, но дамп всегда 0

1 Ответ

0 голосов
/ 28 сентября 2018

РЕДАКТИРОВАТЬ: Дай мне одну секунду.Я думаю, что я неправильно истолковал ваше первоначальное регулярное выражение JS.Исправление.

РЕДАКТИРОВАТЬ 2: Это было больше секунды.Ваше оригинальное регулярное выражение JS было: "/^[\u00C0-\u00ff\s -\~]+$/".Это:

Basic parts of regex:
"/..../" == signifies the start and stop of the Regex.
"^[...]" == signifies anything that is NOT in this group
"+" == signifies at least one of the previous
"$" == signifies the end of the string

Identifiers in the regex:
"\u00c0-\u00ff" == Unicode character range of Character 192 (À) 
                   to Character 255 (ÿ). This is the Latin 1 
                   Extension of the Unicode character set.
"\s" == signifies a Space Character
" -\~" == signifies another identifier for a space character to the 
          (escaped) tilde character (~). This is ASCII 32-126, which
          includes the printable characters of ASCII (except the DEL
          character (127). This includes alpha-numerics amd most punctuation.

Я пропустил вторую половину вашего печатного латинского базового набора символов.Я обновил свое регулярное выражение и тесты, чтобы включить его.Существуют способы сокращения некоторых из этих идентификаторов, но я хотел, чтобы они были явными.

Вы можете попробовать это:

<cfscript>
//http://www.asciitable.com/
//https://en.wikipedia.org/wiki/List_of_Unicode_characters
//https://en.wikipedia.org/wiki/Latin_script_in_Unicode


function charTest(k) {
  return 
    REfind("[^" 
      & chr(32) & "-" & chr(126) 
      & chr(192) & "-" & chr(255) 
      & "]",arguments.k) 
    ? "Please Use Latin Characters Only" 
    : "" 
  ;
}


// TESTS
writeDump(charTest("测")); // Not Latin
writeDump(charTest("test")); // All characters between 31 & 126
writeDump(charTest("À")); // Character 192 (in range)
writeDump(charTest("À ")); // Character 192 and Space
writeDump(charTest("     ")); // Space Characters
writeDump(charTest("12345")); // Digits ( character 48-57 )
writeDump(charTest("ð")); // Character 240 (in range) 
writeDump(charTest("ℿ")); // Character 8511 (outside range)
writeDump(charTest(chr(199))); // CF Character (in range)
writeDump(charTest(chr(10))); // CF Line Feed Character (outside range)
writeDump(charTest(chr(1000))); // CF Character (outside range)

writeDump(charTest("
")); // CRLF (outside range)

writeDump(charTest(URLDecode("%00", "utf-8"))); // CF Null character (outside range)

//writeDump(asc("测"));
//writeDump(asc("test"));
//writeDump(asc("À"));
//writeDump(asc("ð"));
//writeDump(asc("ℿ"));
</cfscript>

https://trycf.com/gist/05d27baaed2b8fc269f90c7c80a1aa82/lucee5?theme=monokai

Все регулярные выраженияон просматривает вашу входную строку, и если он не найдет значение между chr(192) и chr(255), он вернет выбранную вами строку, иначе ничего не будет возвращаться.UNICODE символы ниже 255 напрямую.Я должен проверить это.

Вам нужно предупредить эту функцию, например, Javascript?Если вам нужно, вы можете просто вывести 1 или 0, чтобы определить, действительно ли эта функция нашла искомого персонажа.

...