2015-04-21 4 views
0

Я хотел бы проверить ввод слов, разделенных каким-то разделителем. В этом случае разделителем является «|» знак, разделенных пробелами до и послеJavascript regex для сопоставления слов, разделенных разделителем-разделителем

Hello | There | Yes -----> Match 
Hello     -----> Match 
hello|There   -----> No Match 

До сих пор я получил только первое слово со следующим rejex:

^[a-zA-Z]+ 

как я разделял слова или числа с пространством и разделитель? PS Все еще работает через учебники. Любая помощь была бы оценена

Чтобы уточнить, я ищу регулярное выражение для вышеописанного для виджета dojo dijit для правильной проверки ввода.

dojo.declare("some.class", dijit.form.ValidationTextBox, { 
     regExp: "" 

    }); 

    dojo.addOnLoad(function() { 

    var formString = new some.class({ 
     }, "StringName"); 
    } 

    <form id="myForm" name="myForm"> 
     String: <input id="StringName" name="name" type="text"> 
    </form> 
+0

Это был бы простой способ сделать это без сомнения, но я ищу версию регулярного выражения – Avi

+0

'' Hello | There | Yes ".split ('|') .join(). Split ('') .indexOf ('|') === -1' AND '" Hello | There | Yes ".split ('|') .join(). split (''). indexOf ('|')! == -1' –

+0

@Avi вы хотите сделать проверку всей строки? Каким будет ваш ожидаемый результат? –

ответ

1

Если вы хотите использовать регулярное выражение, вы можете использовать простые регулярные выражения, как это:

^\w+(?:\s\|\s\w+)*$ <--- this allows a unique word 
or 
^\w+(?:\s\|\s\w+)+$ <--- this allows two words at least 

Working demo

Regular expression visualization

код Javascript:

var re = /^\w+(?:\s\|\s\w+)*$/gm; 
var str = 'Hello | There | Yes\nhello|There\n456 | 654 | 645 | 465'; 
var m; 

while ((m = re.exec(str)) !== null) { 
    if (m.index === re.lastIndex) { 
     re.lastIndex++; 
    } 
    // View your result using the m-variable. 
    // eg m[0] etc. 
} 
0

Похоже, вы пытаетесь соответствовать всей строке, если линия имеет вышеупомянутый формат.

^[A-Za-z\d]+(?:\s\|\s[A-Za-z\d]+)+$ 

ИЛИ

Используйте это, если вы хотите, чтобы соответствовать одно слово тоже.

^[A-Za-z\d]+(?:\s\|\s[A-Za-z\d]+)*$ 

DEMO

var s = "Hello | There | Yes"; 
 
var s1 = "hello|There"; 
 
var s2 = "456 | 654 | 645 | 465"; 
 
alert(/^[A-Za-z\d]+(?:\s\|\s[A-Za-z\d]+)+$/.test(s)) 
 
alert(/^[A-Za-z\d]+(?:\s\|\s[A-Za-z\d]+)+$/.test(s1)) 
 
alert(/^[A-Za-z\d]+(?:\s\|\s[A-Za-z\d]+)+$/.test(s2))

2

Если вы знаете, что это всегда будет одно пространство следует символ трубы с последующим одним пробелом, это, вероятно, проще использовать split() без регулярных выражений.

var myArray = myString.split(' | '); 

Если вы абсолютно необходимо использовать регулярное выражение, потому что (к примеру) вы не знаете, какой символ пробела или сколько там будет, вы все еще можете использовать split() но просто передать ему регулярное выражение:

var myRegExp = /\s+\|\s+/; 
var myArray = myString.split(myRegExp); 
+0

Прохладно лучше '/ \ s * \ | \ s * /' –

+0

Как это проверит всю строку? –

+0

@CrayonViolent OP хочет пространства вокруг труб, хотя неясно, разрешено ли несколько пробелов или новых линий и т. Д. Может быть, сменить '/ |/'. – adamdc78

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