VB.NET2005を使っています。
「12345678」や、「abcdefg」といった感じで数字か英語の文字が連続(途中からの連続でもOK)しているか?を判定したいと思っています。いろいろなやり方があるかとは思いますが、私が思いついたのは、
1.1文字目の文字が数字か英字か判定し、そこから文字コードが連続しているか。
2.単純な文字比較。強引に作成(言葉での説明が難しくてすみません)
このくらいでした。
何か良い案がありましたら、アドバイスをいただければと思っています。
よろしくお願いします。
簡易的な判定ですが...
下のようなコードはどうでしょう?
Dim s As String = "efghi"
Debug.Print("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".Contains(s.ToUpper))
難点は"9AB"などもTrueになってしまいます。
Visual Basic 2005 (注:.NETは付かない) に関する質問は,Visual Basic.NET掲示板かVB初心者掲示板ですべきかと。
でもって,正規表現を使うのはダメですか?
数字のみ,英字のみであるならば,擬似コードですが,
Imports System.Text.RegularExpressions
Const pattern As String = "\d+|[a-z]+"
Dim Shared ReadOnly checker As Regex = New Regex(pattern, RegexOptions.Compiled Or RegexOptions.IgnoreCase)
などとすれば,checker.Matchでチェックができます。
数字と英字の混合を許すのであれば,patternの定義を
Const pattern As String = "(\d|[a-z])+"
などとすればよいでしょう。
文字列のパターンマッチを行う場合は正規表現が便利なことが多いですよ。
# 正規表現を使いこなせるようになるまでは大変ですけどね……。
YASさん
YuOさん
お返事、ありがとうございます。
質問内容が板とずれてしまい、申し訳ありません。
ついでで申し訳ありませんが・・・
正規表現も考えたのですが、未経験だったので。この機会に使いたいと思います。
ところで、正規表現で数値や英字の判定は行えますが、
やはり連続した文字の判定は無理でしょうか?
「123456789」と「123a456789」では、「123456789」のみ判定される・・・というのは
可能なのでしょうか?
最初の案では,「123a456789」に対して,
・123
・a
・456789
がマッチします。これがマッチしてはいけないのであれば,もっと条件を細かく詰める必要があります。
例えば,
Const pattern As String = "(?<!(\d|[a-z])+)(\d+|[a-z]+)(?!(\d|[a-z])+)"
を使えば,123456789はマッチしますが,123a456789はマッチしなくなります。
| ツイート |
|