Java
Script is disabled. For a better experience, please enable Java
Script in your browser before proceeding.

Bạn đang xem: Hàm kiểm tra chuỗi có phải là số hay không


*

Có nhiều cách để kiểm tra, sau đây là các cách cơ bản.Kiểm tra String s
Data = "123";1. Sử dụng try catch, tức là kiểm tra bằng cách sử dụng Integer.parse
Int xem kết quả thế nào.
//Way 1 try { Integer.parse
Int(s
Data); System.out.println("Way1 - Is a Number"); } catch (Exception e) { System.out.println("Way1 - Not a Number"); }
Đây là cách dùng không tối ưu, phải phù hợp điều kiện, bạn có thể dùng Integer hoặc Double thậm chí Long nhưng dữ liệu nhập vẫn có thể vượt giới hạn nên chỉ có thể dùng khi bạn giới hạn được độ dài chuỗi nhập vào trước khi đem kiểm tra kiểu này.2. Kiểm tra từng ký tự trong chuỗi có phải là số hay không
//Way3 Pattern pattern = Pattern.compile("\\d*"); Matcher matcher = pattern.matcher(s
Data); if (matcher.matches()) { System.out.println("Way3 - Is a Number"); } else { System.out.println("Way2 - Not a Number"); }
*
Reactions:minhhn0205, nguyen huu huu, thanhlikes09bkdn and 1 other person
*

Ðề: Kiểm tra chuỗi là chữ hay số
Mình thì hay dùng regex cách này khá hay mình thích nó à mà cái regex kiểm tra là số nguyên chỗ \\d* phải là \\d+ chứ nhỉ? * là có thể có hoặc không còn + là nhiều mà nhỉ? Không biết mình có nhầm không nữa .
*

Ðề: Kiểm tra chuỗi là chữ hay số\\d*\\d+ đều cho cùng kết quả, Minh phân tích thêm về regex đi, viết một bài hướng dẫn đơn giản cũng được.
*

Ðề: Kiểm tra chuỗi là chữ hay sốMình cũng có 1 cách tương tự để kiểm tra số cũng dùng regex nhưng không cần dùng tới Pattern và Matcher mà dùng luôn phương thức matches có sẵn của String và theo mình trong trường hợp kiểm tra 1 chuỗi có phải là số hay không như thế này thì dùng cách này là nhanh và tiện nhất Cách của anh Jack
V
//Way3 Pattern pattern = Pattern.compile("\\d*");//// \\d+ hay \\d* đều được
Matcher matcher = pattern.matcher(s
Data); if (matcher.matches()) { System.out.println("Way3 - Is a Number"); } else { System.out.println("Way2 - Not a Number"); }
if(s
Data.matches("\\d+"))// \\d+ hay \\d* đều được{ System.out.println("Way3 - Is a Number");}else{ System.out.println("Way2 - Not a Number");}
Jack
V em cũng muốn viết lắm nhưng mà em không biết diễn tả như thế nào để mọi người hiểu nói đúng hơn là ngôn từ của em còn hạn chế nên cũng khó quá. Hjx em sẽ cố gắng

Ðề: Kiểm tra chuỗi là chữ hay sốCái này hình như chỉ bắt đc kiểu int thôi hả " title="smug :>" data-shortname=":>" />
Uh cái này chỉ bắt kiểu int còn nếu bạn muốn thì có thể làm như sau để có thể bắt được cả kiểu float và số âm.Kiểu int có chấp nhận số âm:
public static boolean check
Int
Number(String s) throws Exception { try { String regex = "(^-)*\\d+"; if(s.matches(regex)) { return true; } else { return false; } } catch(Exception ex) { throw ex; } }
public static boolean check
Float
Number(String s) throws Exception { try { String regex = "(^-)*\\d+(.\\d+)*";//Vẫn có trường hợp .5 tương đương 0.5 nhưng mình chưa viết cái này :D if(s.matches(regex)) { return true; } else { return false; } } catch(Exception ex) { throw ex; } }
Đây là các function mình viết dùng để kiểm tra dữ liệu nhập vào khi làm bài tập hay e
Project có thể có sai sót mong các bạn góp ý thêm.

Xem thêm: Nghe Yasuy Hát ' Nơi Tình Yêu Bắt Đầu ', Vietnam Idol 2015


Integer: ^-?\\d+$Float: ^-?\\d+\\.\\d+$Check Number phải check từ đầu String: ^ và kết thúc String $Với regex \\d* thì vẩn true với "123a"
Trường hợp: Float: ^-?\\d+\\.\\d+$
Số dạng float thì vẫn có thể không có phần thập phân như khi người dùng nhập vào là 100 chẳng hạn thì thế nào bạn?
Trường hợp: Với regex \\d* thì vẩn true với "123a"
Bạn đã test chưa?
\\d*: là tìm ký tự số trong 1 chuổi (zero -> more)Dùng * để check là thấy sai rồi(^-)*\\d+: số âm chỉ có 1 - : -?, -* là zero --> more
Float không . check = regex thì khác gì Integer
Nói chung check number thì check dạng Integer.parse(num)... là tốt nhất vì mổi kiểu số còn quy định range của nó nửa, Integer: 4bit, Float: 8bit...Bạn đã test của mình chưa?
Mình không nói của bạn sai nên không phải test. Không biết bạn có hiểu ý của check Float không nữa? Giờ có bài yêu cầu bạn nhập điểm của học sinh điểm có kiểu float vậy bạn sẽ check thế nào? Bắt buộc phải nhập điểm có phần thập phân à? không được nhập điểm không có phần thập phân? Chẳng hạn 8 điểm thì phải nhập 8.0 à? Bạn vẫn phải cho người ta nhập 8 chứ? Trước khi nói thì bạn test đã nhé mình biết ý nghĩa của các dấu nhưng phải xem viết như thế nào nữa chứ. Ok?
Ðề: Kiểm tra chuỗi là chữ hay sốko hiểu sao mình ko thấy mấy cái bài post của bạn badboy gì đó
Nếu bạn vào coi, bạn giải thích cho mình hiểu tại sao bạn lại nói " title="smug :>" data-shortname=":>" />
Ðề: Ngoài chữ và số thì còn ktra đc loại nào nữa ko
thế giả dụ mình muốn bắt lỗi 1 String chỉ gồm toàn chữ ( ko chứa số , ko chứa các kí tự đặc biệt như - . #$%^^ *) thì làm thế nào
Mà cái này có thể áp dụng cho n~ trường hợp quái hơn như là bắt lỗi nhập Email phải có định dạng là abc
public static boolean check
Int
Number(String s) throws Exception { try { String regex = "(^-)*\\d+"; if(s.matches(regex)) { return true; } else { return false; } } catch(Exception ex) { throw ex; } }
public static boolean check
Float
Number(String s) throws Exception { try { String regex = "(^-)*\\d+(.\\d+)*";//Vẫn có trường hợp .5 tương đương 0.5 nhưng mình chưa viết cái này :D if(s.matches(regex)) { return true; } else { return false; } } catch(Exception ex) { throw ex; } }
Thật ra thì mình chả biết cái này. Toàn làm chân tay ak . Kỳ trước học chuyên đề 1. Ông thầy bắt làm cái calculator giống y bên win. Rồi ông xoắn đủ chỗ. Nếu biết mấy cái này chắc đời đỡ khổ
import java.util.Scanner;// Viết trương trình chuyển đổi chuỗi số sang sốpublic class KBai9 { public KBai9() { // TODO Auto-generated constructor stub } public static boolean Special
Char(String str) { char i; for(i=32; i { for(int j=0; j { if(str.char
At(j) == 44 || str.char
At(j) == 46) { return true; } if(str.char
At(j) == i) { return false; } } } for(i=58; i { for(int j=0; j { if(str.char
At(j) == i) { return false; } } } return true; } public static boolean is
Number(String str) { int tmp = 0; for(int i=0; i { if(Character.is
Letter(str.char
At(i))) { return false; } if(Special
Char(str)==false) { return false; } if(str.char
At(i) == "." || str.char
At(i) == ",") { tmp++; } } if(tmp>1) return false; else return true; } public static void main(String<> args) { // TODO Auto-generated method stub
Suppress
Warnings("resource") Scanner kboard = new Scanner(System.in); System.out.print("Nhap vao mot chuoi: "); String str = kboard.next
Line(); boolean t = is
Number(str); if(t == false) System.out.print("Chuoi nhap vao khong phai la chuoi so"); else { float a = (Float.value
Of(str)).float
Value(); System.out.println("Da chuyen doi chuoi sang so: " + a); } System.out.println(Math.to
Degrees((double)("s" + 6 * 93))); }}// Bài này mình tự làm chứ ko lấy ở bất cứ nguồn nào hết nha..!
Chủ đề19,764Bài viết52,021 Unanswered questions38Answered questions1Thành Viên16,863Thành viên mới nhấtbit0_programmer

Kết luận: Trường hợp mà kết hợp được với logic của ứng dụng thì sử dụng filter_var. Những trường hợp còn lại, sử dụng tương tự như validation của Cake
PHP.

*

is_numeric

là hàm sử dụng để check có phải là số hay không (không chỉ số nguyên). Không chỉ check được những số nhỏ mà cả những số vượt quá mức giới hạn của PHP cũng có thể check được
Tuy nhiên đây không phải hàm thích hợp ở phương diện check số nguyên

assert(is_numeric("0"));assert(is_numeric("1"));assert(is_numeric("1 ") === false); // 1 với spaceassert(is_numeric("a") === false);assert(is_numeric("0.0"));assert(is_numeric(".123"));assert(is_numeric("123."));assert(is_numeric("-1"));assert(is_numeric("-1.0"));assert(is_numeric("+1"));assert(is_numeric("+1.0"));assert(is_numeric("042")); // hệ cơ số 8assert(is_numeric("08")); // 0 đến 10 hệ cơ số「8」assert(is_numeric("1e2")); // hiển thị 100assert(is_numeric("1.001e2")); // hiên thị 100.1assert(is_numeric("1e+2")); // hiển thị 100assert(is_numeric("1e-2")); // biểu thị 0.01assert(is_numeric("0x
Tuy nhiên, đây cũng không phải hàm thích hợp ở phương diện check số nguyên

Tuy nhiên, filter_var có thuộc tính trim sẽ loại bỏ khoảng trắng ‘1 ’ sẽ trả về int(1)

assert(filter_var("0", FILTER_VALIDATE_INT) === 0);assert(filter_var("A", FILTER_VALIDATE_INT) === false);Ngoải ra cũng chấp nhận trường hợp thêm + vào như string("+1”). Nếu muốn tường mình thì có thể sử dụng strpos để check

assert(filter_var("1 ", FILTER_VALIDATE_INT) === 1);Tương tự đối với việc sử dụng validate của Laravel

TIếp Theo là ví dụ về filter_var

assert(filter_var("+1", FILTER_VALIDATE_INT) === 1);Cake
PHP3 Validate
Cake
PHP3 đã có hàm check số nguyên đó là method Cake\Validation\Validation::is
Integer()Tuy nhiên không check được cho trường hợp hệ cơ số 8 hoặc là PHP_MAX_INT vì thế nên tránh sử dụng hàm này để validate

$filter_var = function (string $value): bool { return filter_var($value, FILTER_VALIDATE_INT) !== false;};assert($filter_var("0"));assert($filter_var("1"));assert($filter_var("1 ")); // 1 với spaceassert($filter_var("a") === false);assert($filter_var("0.0") === false);assert($filter_var(".123") === false);assert($filter_var("123.") === false);assert($filter_var("-1"));assert($filter_var("-1.0") === false);assert($filter_var("+1"));assert($filter_var("+1.0") === false);assert($filter_var("042") === false); // hệ cơ số 8assert($filter_var("08") === false); // 0 đén 10 ở hệ cơ số「8」assert($filter_var("1e2") === false); // biển thị 100assert($filter_var("1.001e2") === false); // biểu thị 00.1assert($filter_var("1e+2") === false); // biểu thị 100assert($filter_var("1e-2") === false); // biểu thị 0.01assert($filter_var("0x

assert(intval("0") === 0);assert(intval("1") === 1);assert(intval("1 ") === 1); // 1 với spaceassert(intval("a") === 0);assert(intval("0.0") === 0);assert(intval(".123") === 0);assert(intval("123.") === 123);assert(intval("-1") === -1);assert(intval("-1.0") === -1);assert(intval("+1") === 1);assert(intval("+1.0") === 1);assert(intval("042") === 42); // hệ cơ số 8assert(intval("08") === 8); // 0 đến 10 ở hệ cơ số「8」assert(intval("1e2") === 100); // biểu thị 100assert(intval("1.001e2") === 100); // biểu thị 100.1assert(intval("1e+2") === 100); // biểu thị 100assert(intval("1e-2") === 0); // biểu thị 0.01assert(intval("0x