名称的正则表达式

时间:2012-04-20 16:19:59

标签: php regex preg-match

我需要一个正则表达式来匹配帐户登录。

我想要匹配的符号:

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)$。但它仍然不符合上述所有例子。

实时预览:http://regexr.com?30ncg

以下是它不应匹配的所有符号:

Test?
Test$
Test= (and all special characters like those @#$%^&*=).
Test[]
Test>
Test<
  • 所以它的基本工作查找,但它与Another.Test.12345Special Char Testó这个词不匹配。

我希望它只匹配单词字符(包括ółążźćęąäöüß等特殊字符),数字,点和空格。

我一直在搜索,但在上面给出的例子中找不到比这个更好的正则表达式。

2 个答案:

答案 0 :(得分:1)

如果您只想匹配问题中列出的字符,那么您应该使用此正则表达式:

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

然而,由于这个问题对我(以及很多其他用户)都不清楚,我建议你使用一个匹配所有“字母类”单码unicode字符和一些特殊字符的正则表达式字符。这样的正则表达式将是:

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

答案 1 :(得分: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

上的unicode字符