文字が数字かどうかを判定する場合、System.Char.IsNumber メソッドを使うことができる。
では、ローマ数字などは数字と判定されるのだろうか?
char.IsNumber の場合
今回調べた結果、次のようなテストが通ることが分かった。
using Microsoft.VisualStudio.TestTools.UnitTesting; [TestClass] public class CommonTest { [TestMethod] public void charのIsNumberのテスト() { // ※ 一部に機種依存文字があるので注意 // 指定した文字が数字だと判断されるケース Assert.IsTrue(char.IsNumber('0')); Assert.IsTrue(char.IsNumber('1')); Assert.IsTrue(char.IsNumber('Ⅲ')); // ローマ数字 (大文字) の 3 Assert.IsTrue(char.IsNumber('ⅲ')); // ローマ数字 (小文字) の 3 Assert.IsTrue(char.IsNumber('Ⅰ')); // ローマ数字 (大文字) の 1 Assert.IsTrue(char.IsNumber('①')); // 丸付きの 1 Assert.IsTrue(char.IsNumber('2')); // 所謂全角の 2 // 指定した文字が数字だと判断されないケース Assert.IsFalse(char.IsNumber('.')); // 小数点 Assert.IsFalse(char.IsNumber('-')); // マイナス記号 Assert.IsFalse(char.IsNumber('I')); // アルファベットの I Assert.IsFalse(char.IsNumber('一')); // 漢数字 Assert.IsFalse(char.IsNumber('四')); // 漢数字 Assert.IsFalse(char.IsNumber('壱')); // 大字の 1 Assert.IsFalse(char.IsNumber('壹')); // 大字の 1 (壱の舊字體) } }
ローマ数字や丸付き数字、所謂全角の数字が数字と見做されていることが分かる。
char.IsDigit の場合
char.IsDigit だとどうだろう。
using Microsoft.VisualStudio.TestTools.UnitTesting; [TestMethod] public void charのIsDigitのテスト() { // ※ 一部に機種依存文字があるので注意 // 指定した文字が数字だと判断されるケース Assert.IsTrue(char.IsDigit('0')); Assert.IsTrue(char.IsDigit('1')); Assert.IsTrue(char.IsDigit('2')); // 所謂全角の 2 // 指定した文字が数字だと判断されないケース Assert.IsFalse(char.IsDigit('.')); // 小数点 Assert.IsFalse(char.IsDigit('-')); // マイナス Assert.IsFalse(char.IsDigit('①')); // 丸付きの 1 Assert.IsFalse(char.IsDigit('Ⅲ')); // ローマ数字 (大文字) の 3 Assert.IsFalse(char.IsDigit('ⅲ')); // ローマ数字 (小文字) の 3 Assert.IsFalse(char.IsDigit('Ⅰ')); // ローマ数字 (大文字) の 1 Assert.IsFalse(char.IsDigit('I')); // アルファベットの I Assert.IsFalse(char.IsDigit('一')); // 漢数字 Assert.IsFalse(char.IsDigit('四')); // 漢数字 Assert.IsFalse(char.IsDigit('壱')); // 大字の 1 Assert.IsFalse(char.IsDigit('壹')); // 大字の 1 (壱の舊字體) }
こちらでは、ローマ数字や丸付き数字が数字だと見做されない。
int.TryParse の場合
int.TryParse でもやってみた。
using Microsoft.VisualStudio.TestTools.UnitTesting; [TestMethod] public void intのTryParseのテスト() { // ※ 一部に機種依存文字があるので注意 int number; // 指定した文字が数字だと判断されるケース Assert.IsTrue(int.TryParse("0", out number)); Assert.IsTrue(int.TryParse("1", out number)); Assert.IsTrue(int.TryParse("2", out number)); // 所謂全角の 2 // 指定した文字が数字だと判断されないケース Assert.IsFalse(int.TryParse(".", out number)); // 小数点 Assert.IsFalse(int.TryParse("-", out number)); // マイナス Assert.IsFalse(int.TryParse("①", out number)); // 丸付きの 1 Assert.IsFalse(int.TryParse("Ⅲ", out number)); // ローマ数字 (大文字) の 3 Assert.IsFalse(int.TryParse("ⅲ", out number)); // ローマ数字 (小文字) の 3 Assert.IsFalse(int.TryParse("Ⅰ", out number)); // ローマ数字 (大文字) の 1 Assert.IsFalse(int.TryParse("I", out number)); // アルファベットの I Assert.IsFalse(int.TryParse("一", out number)); // 漢数字 Assert.IsFalse(int.TryParse("四", out number)); // 漢数字 Assert.IsFalse(int.TryParse("壱", out number)); // 大字の 1 Assert.IsFalse(int.TryParse("壹", out number)); // 大字の 1 (壱の舊字體) }
こちらは、char.IsDigit と同じ結果となった。