連続した文字を判定するには?


TAK  2007-08-29 00:48:05  No: 99374

VB.NET2005を使っています。

「12345678」や、「abcdefg」といった感じで数字か英語の文字が連続(途中からの連続でもOK)しているか?を判定したいと思っています。いろいろなやり方があるかとは思いますが、私が思いついたのは、
1.1文字目の文字が数字か英字か判定し、そこから文字コードが連続しているか。
2.単純な文字比較。強引に作成(言葉での説明が難しくてすみません)

このくらいでした。
何か良い案がありましたら、アドバイスをいただければと思っています。
よろしくお願いします。


YAS  2007-08-29 01:32:13  No: 99375

簡易的な判定ですが...
下のようなコードはどうでしょう?

Dim s As String = "efghi"
Debug.Print("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".Contains(s.ToUpper))

難点は"9AB"などもTrueになってしまいます。


YuO  2007-08-29 02:49:24  No: 99376

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])+"
などとすればよいでしょう。

文字列のパターンマッチを行う場合は正規表現が便利なことが多いですよ。
# 正規表現を使いこなせるようになるまでは大変ですけどね……。


TAK  2007-08-29 13:11:51  No: 99377

YASさん
YuOさん

お返事、ありがとうございます。
質問内容が板とずれてしまい、申し訳ありません。

ついでで申し訳ありませんが・・・
正規表現も考えたのですが、未経験だったので。この機会に使いたいと思います。
ところで、正規表現で数値や英字の判定は行えますが、
やはり連続した文字の判定は無理でしょうか?
「123456789」と「123a456789」では、「123456789」のみ判定される・・・というのは
可能なのでしょうか?


YuO  2007-08-29 14:04:27  No: 99378

最初の案では,「123a456789」に対して,
・123
・a
・456789
がマッチします。これがマッチしてはいけないのであれば,もっと条件を細かく詰める必要があります。
例えば,
Const pattern As String = "(?<!(\d|[a-z])+)(\d+|[a-z]+)(?!(\d|[a-z])+)"
を使えば,123456789はマッチしますが,123a456789はマッチしなくなります。


※作成する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。







   このエントリーをはてなブックマークに追加