9

次の形式でなければならない文字列があります。

XXXX-XX-XXX-XXXX-XXXXXXXXXX-X

ここで、X は整数です。整数の数は問題ではありません。文字列が次のことを確認する必要があります。

  • 整数で始まり整数で終わる
  • ダッシュで区切られた整数のみを含む

それを検証する最も簡単な方法は何ですか?

4

4 に答える 4

14

この正規表現でうまくいくはずです。負の後読みを使用して連続する複数のダッシュが一致しないようにします。

^\d(\d|(?<!-)-)*\d$|^\d$

 ^        ^       ^    ^
 |        |       |    -- is a single digit, or
 |        |       ------- ends with a digit
 |        ----------------consists on digits or dashes not preceded by dashes
 ---------------------starts with a digit

これは、その使用法を示すC#コードです(ideoneでも):

var r = new Regex("^\\d(\\d|(?<!-)-)*\\d$|^\\d$");
Console.WriteLine(r.IsMatch("1-2-3"));
Console.WriteLine(r.IsMatch("1-222-3333"));
Console.WriteLine(r.IsMatch("123"));
Console.WriteLine(r.IsMatch("1-2-3-"));
Console.WriteLine(r.IsMatch("1"));
Console.WriteLine(r.IsMatch("-11-2-3-"));
于 2012-05-17T13:08:54.500 に答える
8

正規表現を使用します。

^\d[-0-9]+\d$

これは、文字列が少なくとも3文字の長さであることを前提としています。

壊す:

^    - match start of string
\d   - match a digit
[    - start of character class containing:
-      - a dash
0-9    - 0 to 9
]    - end of character class
+    - match one or more of the previous
\d   - match a digit
$    - match end of string

をに変更し+*2桁の文字列を有効にし、代替を追加して1桁の文字列も有効にすることができます。

^(\d|\d[-0-9]*\d)$

注:.NETでは、任意の\dUnicode数字と一致します(たとえば、アラビア数字が一致します)。これが不要な場合は、すべての場所でに置き換えてください。\d[0-9]

于 2012-05-17T13:09:25.840 に答える
5

トリックを行う正規表現を書くことができます。

その正規表現を使用して文字列を検証できるよりも

^ ---->Start of a string. 
$ ---->End of a string. 
. ----> Any character (except \n newline) 
{...}----> Explicit quantifier notation. 
[...] ---->Explicit set of characters to match. 
(...) ---->Logical grouping of part of an expression. 
* ---->0 or more of previous expression. 
+ ---->1 or more of previous expression. 
? ---->0 or 1 of previous expression; also forces minimal matching when an expression might match several strings within a search string. 
\ ---->Preceding one of the above, it makes it a literal instead of a special character. Preceding a special matching character, see below. 
\w ----> matches any word character, equivalent to [a-zA-Z0-9] 
\W ----> matches any non word character, equivalent to [^a-zA-Z0-9]. 
\s ----> matches any white space character, equivalent to [\f\n\r\v] 
\S----> matches any non-white space characters, equivalent to [^\f\n\r\v] 
\d ----> matches any decimal digits, equivalent to [0-9] 
\D----> matches any non-digit characters, equivalent to [^0-9] 

\a ----> Matches a bell (alarm) \u0007. 
\b ----> Matches a backspace \u0008 if in a [] character class; otherwise, see the note following this table. 
\t ---->Matches a tab \u0009. 
\r ---->Matches a carriage return \u000D. 
\v ---->Matches a vertical tab \u000B. 
\f ---->Matches a form feed \u000C. 
\n ---->Matches a new line \u000A. 
\e ---->Matches an escape \u001B 

$number ----> Substitutes the last substring matched by group number number (decimal). 
${name} ----> Substitutes the last substring matched by a (? ) group. 
$$ ----> Substitutes a single "$" literal. 
$& ----> Substitutes a copy of the entire match itself. 
$` ----> Substitutes all the text of the input string before the match. 
$' ----> Substitutes all the text of the input string after the match. 
$+ ----> Substitutes the last group captured. 
$_ ----> Substitutes the entire input string. 

(?(expression)yes|no) ----> Matches yes part if expression matches and no part will be ommited. 

詳細はこちら

http://geekswithblogs.net/brcraju/archive/2003/10/23/235.aspx

于 2012-05-17T13:07:51.363 に答える
1

正規表現はおそらくこれが役立つかもしれない方法です:

http://www.regular-expressions.info/creditcard.html

于 2012-05-17T13:08:52.783 に答える