2012-04-20 2 views
-3

Мне нужно регулярное выражение для соответствия входам в учетную запись.Регулярное выражение для имени

символов Я хотел бы, чтобы соответствовать:

Test 
testtest 
Special Char Testó 
Special Char Test 
Test Test 
Hai hai 
Test-ó 
Test.ó 
Testó 
Another Test 12345 
Another.Test.12345 

Ближайшего регулярного выражения у меня есть находка: ^(?=[^ ])[a-zA-Z0-9 +&-]+(?<=\S)$. Но это все еще не соответствует всем приведенным выше примерам.

Live Preview: http://regexr.com?30ncg

Здесь все символы он не должен матч:

Test? 
Test$ 
Test= (and all special characters like those @#$%^&*=). 
Test[] 
Test> 
Test< 
  • поэтому его основно работает найти, но оно не соответствует слово как Another.Test.12345 или Special Char Testó.

Я хочу, чтобы соответствовать только слову символов (включая специальные, как ółążźćęą и äöüß), цифры, точки и пробела.

Я много искал, но не нашел лучшего правильного выражения, чем это в приведенном выше примере.

+0

Я не могу понять, что именно вы хотите здесь найти? Просто все символы? Дайте мне пример того, что вам не нужно сопоставлять. –

+1

'Символы, которые я хотел бы совместить:' ... только все из них. – Cyclone

+1

Я не понимаю, как этот вопрос имеет уже три оповещения - вам нужно подробно остановиться на том, чего вы пытаетесь достичь. Каков ваш набор входных данных? Что * точно * вы пытаетесь сопоставить? Все, что вы сказали до сих пор, это «Я хочу совместить все символы». Итак, вы ищете '(. *)'? –

ответ

1

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

/(?:\A|(?<=[^a-zA-Z0-9\+\&\-ółążźćęąäöüß\.\s]))([a-zA-Z0-9\+\&\-ółążźćęąäöüß\.\s]+)(?:(?=[^a-zA-Z0-9\+\&\-ółążźćęąäöüß\.\s])|\z)/ 

Однако, как вопрос вроде неясными для меня (и много других пользователей), я хотел бы предложить вам использовать регулярное выражение, которое будет соответствовать всем символам Юникода с одним символом букв и некоторым вашим специальным символам. Такое регулярное выражение будет таким:

/(?:\A|(?<=[^\p{L}\+\-\&\.\s]))([\p{L}\+\-\&\.\s]+)(?:(?=[^\p{L}\+\-\&\.\s])|\z)/ 
+0

Выглядит неплохо! Спасибо. – Cyclone

+1

Что можно сказать о других символах Unicode, отличных от ASCII? –

+0

@JackManey - Я помещаю в набор регулярных выражений, которые ОП запрашивает для соответствия, так что, пожалуйста, будьте более конкретными, что вы имеете в виду или что вы предлагаете? Спасибо. –

0

[Примечание] Я не читал ваши изменения, прежде чем я это.

Предполагаю, что вы используете PHP. Это сработало для меня:

$a = 'Test 
testtest 
Special Char TestóááÓ 
Special Char Testß 
Test Test 
Hai hai 
Test-ó 
Test.ó 
Testó 
Another Test 12345 
Another.Test.12345'; 

preg_match_all('/^(?=[^ ])[\w \.-\p{L}]+$/m', $a, $ms); 

var_dump($ms); 

Он соответствовал всем линиям. \p{L} будет соответствовать символам Юникода, указанному на http://php.net/manual/en/regexp.reference.unicode.php

+0

Фактически '\ p {L}' будет соответствовать множеству символов, которые OP не запрашивал - он соответствовал бы всем ** "буквам" ** class unicode для одиночных символов, например, для всех испанских латинских символов, Итальянский и т. Д. –

+0

Да, я использую PHP, но почему он здесь не работает http://gskinner.com/RegExr/?30nc4? – Cyclone

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