2016-03-21 4 views
1

Я пытаюсь написать REGEX для javascript для проверки строки.Javascript эквивалент Java Regex

Он должен соответствовать требованиям, которые следуют ниже.

он должен иметь только буквы в верхнем и нижнем регистре (от a до z, от A до Z) (ASCII: от 65 до 90, от 97 до 122) И/ИЛИ цифры от 0 до 9 (ASCII: от 48 до 57) И символы - _ ~ (ASCII: 45, 95, 126). При условии, что они не являются первым или последним символом. Он также может иметь характер. (точка, период, полная остановка) (ASCII: 46) При условии, что он не является первым или последним символом и также предусматривает, что он не появляется два или более раз подряд.

У меня есть версия REGEX в Java, как показано ниже.

^(= [^ \ W _]?) [\ Ш ~ -] ++ (\ [\ ш * ~ -]. ++) (? < = [^ \ W _]) * + $

И безуспешно пытается его использовать, используя Javascript. Ниже моя неудачная попытка.

^(= [^ \ W _]?) [\ Ш ~ -] + (. [\ Ш ~ -] +) (. [\ ш]) $

его терпит неудачу на последующих двух тестов

abc..def 1

тестов для недействительных строк:

"a." "1." "a1." "aB78." "aB78..ab" "aB78,1" "aB78 abc" ".Abc12"

Тестовые для действительных строк:

"a" "1" "a1" "a.1" "abc-def" "a1b2c~3" "012_345"

+0

JS регулярное выражение в основном так же, как и любой другой регулярное выражение. что вы пробовали? – llamerr

+0

** Что ** вы пытались преобразовать в JS? Покажите нам свою неудачную попытку! – Bergi

+0

может быть проще использовать неконвертирующую группу '?:' –

ответ

3

Основываясь на ваших требований, вы могли бы придумать:

^(?!.*\.{2})(?=.*[a-zA-Z0-9]$)[a-zA-Z0-9][-~.\w]*$ 

В multiline режиме см a demo on regex101.com.

Объяснение:

  • ^ уверяют, что это начало линии
  • отрицательный предпросмотр - нет двух точек последовательно
  • (* {2}?!.). (? =.* [A-Za-Z0-9] $) последний символ должен быть один из них
  • [A-Za-Z0-9] первый символ должен быть один из этих
  • [- ~. \ ш] * что-нибудь из них впоследствии (ноль или более раз)
  • $ уверить строку заканчивается
+1

Это прекрасно работает. Спасибо, что нашли время для объяснения регулярного выражения. –

+0

@AGilani: Добро пожаловать, рад помочь. – Jan

+0

Выражение не выполняется для одного символа и 2 символьной строки. например 'a a1 1a' –

2

Там нет в регулярных выражениях просмотра назад JavaScript. К счастью, вам все равно не нужно было в вашем случае. Заменить

(?<=[^\W_]) 

С только

[^\W_] 
+0

. Я пришел к такому же выводу и переписал его следующим образом:'^(? = [^ \ W _]) [\ w ~ -] + (\. [\ W ~ -] +) * (. * [a-zA-Z0-9]) $ ' –

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