Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярные выражения в условиях (https://javascript.ru/forum/misc/55763-regulyarnye-vyrazheniya-v-usloviyakh.html)

Ramundo 13.05.2015 14:07

Регулярные выражения в условиях
 
Помогите написать регулярное выражение, совпадающее со строкой, которая:
-не содержит пробелов
-не содержит никаких символов, кроме символов из набора A-Za-z0-9, точки, подчеркивания и минуса
-начинается только с символа из набора A-Za-z0-9 и заканчивается только A-Za-z0-9
И самое главное - добавить к этому проверку, не допускающую, чтобы между буквенными или цифровыми символами могло быть больше одного из этих символов: . -_

В общем, чтобы могло быть так:
Рыцарь_Смерти
777neo_hell777
M.e.g.A
T-u-r-b-O
N_A_G_I_B_A_T_O_R_666 и т.д.

И не могло быть так:
_Mamku_epal_
.ZVER.
-imba-
V_-olchara
T.-_voy--pa..pka и т.д.

kichSman 13.05.2015 14:41

Цитата:

Сообщение от Ramundo
Помогите написать регулярное выражение

без jQuery - никак

ruslan_mart 13.05.2015 15:16

var arr = ['Рыцарь_Смерти', '777neo_hell777', 'M.e.g.A', 'T-u-r-b-O', 'N_A_G_I_B_A_T_O_R_666', '_Mamku_epal_', '.ZVER.', '-imba-', 'V_-olchara', 'T.-_voy--pa..pka'];

var reg = /^([a-zа-яё\d])([_.-](?![_.-])|[a-zа-яё\d])*[a-zа-яё\d]$/i;

arr.forEach(function(item) {
    console.log( item + ': ' + reg.test(item) );
});

рони 13.05.2015 15:22

Цитата:

Сообщение от kichSman
без jQuery - никак

точно! :cray:
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  table,td{
    border: #000080 1px solid
  }
  .red{
      background: #FF6161
  }
  .green {
    background: #66CC33
  }

  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
 $(function() {
    var d = /^[a-z\u0430-\u044f\u0451\d]+([-._]?[a-z\u0430-\u044f\u0451\d])*$/i,
        a = $("<table/>");
    $.each("Рыцарь_Смерти|777neo_hell777|M.e.g.A|T-u-r-b-O|N_A_G_I_B_A_T_O_R_666|_Mamku_epal_|.ZVER.|-imba-|V_-olchara|T.-_voy--pa..pka".split("|"), function(e, b) {
        var c = $("<tr/>");
        $.each([b, d.test(b)], function(a) {
            c.append($("<td/>", {
                text: this,
                "class": a ? 1 == this ? "green" : "red" : ""
            }))
        });
        $(a).append(c)
    });
    $("body").append(a)
});

  </script>
</head>

<body>

</body>

</html>

kichSman 13.05.2015 15:42

рони, Коллега, что бы код не был легкомысленным, нужно добавить больше $.isArray()

рони 13.05.2015 15:48

kichSman,
:-?

Rise 13.05.2015 16:26

А вот так не хотите :)
/^([a-z0-9]([._-](?=[a-z0-9]))?)+$/i

рони 13.05.2015 16:53

Цитата:

Сообщение от Rise
А вот так не хотите

нет
alert(/^([a-z0-9]([._-](?=[a-z0-9]))?)+$/i.test('Рыцарь_Смерти'));

Ramundo 13.05.2015 22:03

рони,
Rise,
Ruslan_xDD,
Спасибо, люди! Все вариант ы прекрасно работают!
рони, отдельно благодарю за таблицу истиности :victory:


Часовой пояс GMT +3, время: 03:16.